Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите плиз как дерево построить  [new]
Azi
Guest
Сори за не совсем понятный заголовок...
Требуется распихать по таблицам примерно такую структуру:

"объект"->"его история"
|->парметры истории
|->"объект"

т.е. есть объект - есть его история существования, в которой, наряду с параметрами истории, есть ссылка на другой объект... и тд.

Поиск ничего вразумительного не дал, да честно говоря и времени особо нет - нужно до завтра вопрос решить....
1 окт 03, 17:47    [359816]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
MrSany
Member

Откуда: Москва
Сообщений: 16
Навскидку:Может быть нарисовать себе как бы этот объект в XML хранился, а потом, зная структуру тегов, распихать это дело по таблицам - просто?!
1 окт 03, 19:09    [359967]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
Quark
Member

Откуда: Екат
Сообщений: 1099
Попробуй так чтоли:
1.БД объектов ОбъектИД
2.БД историй ОбъектИД, ДатаВИстории,СсылкаНаДругойОбъектИД
2 окт 03, 09:20    [360303]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
Azi
Guest
Вариант, который пришел в голову первым (и увы последним)
1. Табл. ОБЪЕКТ(ид_об, св-ва)
2. Табл. ИСТОРИЯ(ид_ист, св-ва)
3. Табл. ИСТ-ОБ(ид_ист,ид_об).
Т.е в 3 таблице накиданы все связи между историями и объектами
Пример
Смотрим историю Объекта1 с ид_ист1. Далее лезем в ИСТ-ОБ и по ид_ист1 ищем все объекты, которые в ней упоминаются, находим - лезем в ИСТОРИЯ с ид_об и тд...

Но мне кажется какой-то топорный вариант, хотелосьбы че-нить по-изящней.
Мож кто посоветует где почитать про реализацию деревьев в субд??
2 окт 03, 09:36    [360326]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
KOLCHOZ_POSTEVENT
Guest
Классическая рекурсивная задача.Так она,по крайней мере,видится.
Черкни,пока,как бы ты хотел видеть выход.
Если будет время,подумаем,что делать.Я щас иду в самоволку,по возврате,постараюсь заглянуть.Пока.
2 окт 03, 11:35    [360596]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
Azi
Guest
Как уже писал:
Смотрим историю Объекта1 с ид_ист1. Далее лезем в ИСТ-ОБ и по ид_ист1 ищем все объекты, которые в ней упоминаются, находим - лезем в ИСТОРИЯ с ид_об и тд... до тех пор пока не получим историю, с которой не связан никакой объект либо когда все объекты исчерпаны(но вроде все равно приходим к истории, не связанной с другими объектами).
Особенность в том, что построенное таким образом дерево действительно только на данный момент времени(либо заданный интервал времени - прим. выдать историю объекта1 с 12-00 по 23-00)

ну как-то так
2 окт 03, 11:55    [360639]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
zDIV
Member

Откуда: Оренбург
Сообщений: 390
У объекта одна только история? Какова роль параметров, по-подробнее бы?
Если да...
Табла с историями вырождается...
Если нет (без таблы параметров)...
Objects(ObID, ...)
Histories(HiID, ObID, ...) история для объекта
HiObRefs(HiID, ObID, больше полей нет) история ссылается на (другой) объект
2 окт 03, 12:10    [360679]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
Azi
Guest
для zDIV:
Ну конечно одна... История у любого объекта в этом мире одна :)
Она только может быть связана с историей другого(других) объекта.
Параметры истории на данном этапе не особо важны и для меня пока практически не известны. Задачка подкинута как есть. Если все параметры историии можно будет свалить в табл. объектов, то так и сделается, но механизм от этого не поменяется.
А твой вариант - это как раз то, что, как мне кажется, вообще приходит в голову первым делом - я его уже упомянул..
2 окт 03, 12:24    [360717]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
zDIV
Member

Откуда: Оренбург
Сообщений: 390
Извини, если торможу, что бывает часто. Но если одна, то зачем табла историй? Objects(ObID, свойства об. и его ист.) Refs(MasterObID, DetailObID).
И честно говоря, мне маловато инфы по задаче для советов...
2 окт 03, 12:34    [360737]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
Azi
Guest
Ну вообще таблица историй нужна.
Обдъект заведен один раз и в табл. объектов они только добавляются..
А история накапливается(при переходе объекта из одного состояния в другое или при смене какого-либо его параметра например.) и складируется как раз в таблицу историй с отметками времени, когда произошел очередной эпизод
2 окт 03, 12:48    [360773]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
KOLCHOZ_POSTEVENT
Guest
create proc p_history_obj (@id_hist as int,@call_counter as int)
as
declare @new_id_hist as int

insert t_vspomog_out
(id_obj,history)
select id_obj , history
from t_history
where id_obj=@id_hist
-------------Проверка на окончание процы------------------
set @call_counter=@call_counter+1

select @new_id_hist=id_obj
from t_history_object
where id_obj=@id_hist

if isnull(@new_id_obj, -1) = -1 or @call_counter>20 RETURN
----------------------------------------------------------

exec (@new_id_obj,@call_counter)--рекурсивный вызов
return
--пример запуска
/*
truncate table t_vspomog_out
exec (100,0)--100 это id исследуемого объекта
select * from t_vspomog_out
*/
2 окт 03, 13:16    [360834]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
KOLCHOZ_POSTEVENT
Guest
Опечаточка:
всюду вместо @new_id_obj
читать @new_id_hist
2 окт 03, 13:22    [360850]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
KOLCHOZ_POSTEVENT
Guest
Тут столько опечаток,что я всё периписываю заново
create proc p_history_obj (@id_hist as int,@call_counter as int)
as
declare @new_id_hist as int

insert t_vspomog_out
(id_obj,history)
select id_obj , history
from t_history
where id_obj=@id_hist
-------------Проверка на окончание процы------------------
set @call_counter=@call_counter+1

select @new_id_hist=id_obj
from t_history_object
where id_obj=@id_hist

if isnull(@new_id_hist, -1) = -1 or @call_counter>20 RETURN
----------------------------------------------------------

exec p_history_obj(@new_id_hist,@call_counter)--рекурсивный вызов
return
--пример запуска
/*
truncate table t_vspomog_out
exec p_history_obj(100,0)--100 это id исследуемого объекта
select * from t_vspomog_out
*/
2 окт 03, 13:28    [360871]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
Azi
Guest
Спасибо буду разбираться..
Сейчас нету времени совсем.
Но меня в первую очередь интересует как грамотнее организовать хранение такой структуры, а механизм выборки уже после
2 окт 03, 14:45    [361083]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
2Azi:

Тогда почитай вначале
ЭТО
И ЭТО
2 окт 03, 16:49    [361476]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите плиз как дерево построить  [new]
Azi
Guest
Ок. Спасибо...
То что нужно
2 окт 03, 17:08    [361547]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить