Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.17;
Скачать: CL | DM;

Вниз

Организация иерархии в таблице   Найти похожие ветки 

 
Well   (2003-10-27 12:27) [0]

Раньше описывал иерархию подразделений с помощью нескольких таблиц (1 уровень, 2 уровень, 3 и.т.д.). В записе 3 уровне есть ссылка на 2 уровень, в записи 2-ссылка на 1 и.т.д.
Неудобство этого метода заключается в том, что при изменении уровня иерархии у какого либо подразделения необхлдимо это подразделение удалять из одной таблицы и добавлять в таблицу нового уровня.
Чтобы избавиться от этого неудобства весь список подразделений организовал в одной таблице, в которой есть поле-ссылка на вышестоящее подразделение в той же таблице.
Проблема заключается в воде даных. Раньше я использовал компонент DBLookupComboBox, но для одной таблицы (ссылка на поле той же таблицы) не работает.
Пришлось вводить дополнительный компонент Table2 и ссылаться на него.

Есть ли другой способ заполнения данными таблицы не используя дублирующих таблиц?


 
Sandman25 ©   (2003-10-27 12:30) [1]

Query с запросом на соответствующий уровень


 
Well   (2003-10-27 12:46) [2]

Можно и фильтр применить, но применяя DBLookupComboBox переходя от записи к записи, я мог видеть видеть всю иерархическую структуру с самого верхнего уровня до нижнего.


 
Sandman25 ©   (2003-10-27 12:48) [3]

Я для ввода таких данных использую кнопку, при нажатии на которую показывается TreeView со справочником.


 
Term ©   (2003-10-27 12:50) [4]

мне кажется это не верный подход, я бы сделал проще все бы держал в одной таблице, а для каждой записи добавить одно поле в котором указывать родителя...
хотя может я и не прав, но так кажется универсальнее


 
Well   (2003-10-27 14:33) [5]

Писать в каждой записи имя родителя?
Но во-первых это дольше чем выбирать из справочника, а во вторых легко сделать ошибку и получить родителя-двойника(с пробелом, например).
Задача в том, чтобы быстро находить родителя в общем списке (сотни 2-3 записей)начиная со списка верзнего уровня,затем выбор подразделения и переход к списку нижнего уровня ,связянного с родителем) и.т.д.
А также возможность автоматического отображения иерархии при переходе от одной записи к другой.


 
Vlad ©   (2003-10-27 14:41) [6]

>Well (27.10.03 14:33) [5]
Стандартный способ иерархического хранения данных следующий:
ID | PARENT_ID | .... остальные поля
Далее все зависит от того, какая СУБД.
В Оракле например есть стандартный механизм работы с иерархическими таблицами.
В IB, чтобы вытащить всю ветку от заданного узла, требуется написать рекурсивную ХП.
А на клиенте, для ведения подобных справочников разумно использовать TreeView + DBGrid


 
Zacho ©   (2003-10-27 15:24) [7]

Посмотри статьи на http://www.ibase.ru/develop.htm , раздел "Древовидные и иерархические структуры, хранение объектов"


 
Well   (2003-10-27 17:09) [8]

>Zacho
Спасибо, почитаю.
>Vlad
В принципе в таком виде я и планирую хранить информацию. А СУБД использую MSSQL. Вероятно придется написать хранимую процедуру, хотя еще надо подумать..



Страницы: 1 вся ветка

Текущий архив: 2003.11.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
8-56778
Kair
2003-07-22 11:11
2003.11.17
BASS_EAXPreset


6-56786
LOX
2003-09-17 18:25
2003.11.17
Как сделать самый простой SMTP сервер.


14-56897
Сатир
2003-10-25 18:14
2003.11.17
Воспроизведение анимированных gif-ов на делфийской форме


14-56817
horus
2003-10-24 17:25
2003.11.17
Как Вы относитесь к идее создания рассылки?


1-56635
Jee
2003-11-05 14:21
2003.11.17
Редактор свойств