Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.014 c
8-56777
DBDev
2003-07-22 14:00
2003.11.17
какой функцией вычленить заданный фрагмент из TPicture?


9-56425
cyborg
2003-05-14 11:36
2003.11.17
Вылет


3-56505
Tumcoat
2003-10-28 07:13
2003.11.17
Быстрый поиск по полю типа Date


1-56758
McSimm2
2003-11-06 15:53
2003.11.17
Set of


6-56791
Pavel Oliynik
2003-09-18 09:35
2003.11.17
как узнать по іp имя текущего почтаря, если он есть




   Наверх