Главная страница
    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.46 MB
Время: 0.011 c
1-56597
scorpi
2003-11-06 07:56
2003.11.17
Считывание координат с Формы


4-56961
Dmk
2003-08-29 00:55
2003.11.17
EnumForms


3-56518
ripp
2003-10-27 17:57
2003.11.17
В Дельфи 6 ругается на VarArrayOf (undeclared identifier)


1-56735
Timon
2003-11-06 19:16
2003.11.17
Замена фраз в бинарном файле. Помогите


1-56605
Micah'GF
2003-11-05 22:12
2003.11.17
Чем очистить TImage





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский