Текущий архив: 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.46 MB
Время: 0.011 c