Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Организация иерархии в таблице


Well ©   (2003-10-27 12:27:00) 

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

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


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

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


Zacho   (2003-10-27 15:24:00) [2]

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


Vlad   (2003-10-27 14:41:00) [3]

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


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

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


Term   (2003-10-27 12:50:00) [5]

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


Sandman25   (2003-10-27 12:48:00) [6]

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


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

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


Sandman25   (2003-10-27 12:30:00) [8]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо