Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
1-56719
webpauk
2003-11-06 17:03
2003.11.17
Переопределение размерности свойства


14-56861
Semas
2003-10-27 11:48
2003.11.17
basic интерпритация


14-56847
Dark Elf
2003-10-27 11:45
2003.11.17
Что такое hMutex?


1-56744
Intense
2003-11-07 22:15
2003.11.17
создание MDI-окна в run-time


3-56526
Berg
2003-10-27 15:39
2003.11.17
Конвертирование Parodox в MySQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский