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

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

Создать дерево в БД. [D7, IB6.x, FireBird]


Страницы:   1 2

worldmen ©   (2005-08-11 11:51:00) 

Как создать деревья в БД?
Пример Отдел_1
          |- должность1
          |- должность2
      Отдел_2
          |- должность1
          |- должность3


Rule   (2005-08-11 14:38:00) [1]

на ibase.ru  достаточно материала про деревья для понимания
http://ibase.ru/devinfo/treedb.htm
http://ibase.ru/devinfo/treedb2.htm
http://sdm.viptop.ru/articles/sqltrees.html

там ещё есть, но этого вполне достаточно для осознания сущности вопроса и реализации на практике решения


sniknik   (2005-08-11 13:49:00) [2]

msguns ©   (11.08.05 13:17) [17]
да это всем понятно. стандартное дерево (+- пара дополнительных информационных полей ничего не меняет)

но посмотри на пример. внимательно. зачем оно там нужно? только изза желания впихнуть в одну таблицу? не нужно там этого.

вот если бы нужно было держать структуру, типа
группа фирм 1
        |- концерн 1
               |- фирма 1
                     |- Отдел 1
                           |- Должность 1
                           |- Должность 2
                           + неотределенное их количество
                     |- Отдел 2
               |- фирма 2
                     |- Нет структуры только создана
               + неотределенное их количество
               |- Должность 1
               |- Должность 2
        |- концерн 1
               |- фирма 1
               |- фирма 2
               + неотределенное их количество
               |- Отдел 1
        + неотределенное их количество
        |- Отдел 1
        |- Должность 1
группа фирм 2
        |- Должность 1 - структура только создана все фирмы пока "бумажные", должность уже есть, этот человек все организовывает  
+ неотределенное их количество


т.е. структура с разветвленной и неопределенной вложенностью, в офисе "группы фирм" и в "концернах" естественно тоже есть отделы/должности, и есть должности вне отделов непосредственно от "фирмы" и т.д. ну вот если чтото типа этого. то да, двумя руками за дерево. а по тому что в примере максимум 2 связанные таблици (две таблици вместо одной тут это упрошение а не усложнение ;о).


Sergey13   (2005-08-11 13:33:00) [3]

2[17] msguns ©   (11.08.05 13:17)
>Все штатное спокойно влазит в одну таблицу:
В такой горшок.... тьфу.
В такую таблицу (если ROOTFLAG сделать более емким) можно все что угодно засунуть.
8-)


Nikolay M.   (2005-08-11 13:26:00) [4]

Обчитайся про деревья :)

http://sdm.viptop.ru/articles/sqltrees.html


msguns   (2005-08-11 13:17:00) [5]

Все штатное спокойно влазит в одну таблицу:

ID            - UID записи
PARENTID      - UID узла
ROOTFLAG      - Признак узла (если false, то это строка должн)
DID           - Ссылка на справочник должностей (nil для узлов)
<Категория, разряд, кол-во, оклад по штату и т.д.-для узлов пусто>


ANB   (2005-08-11 12:40:00) [6]


> msguns ©   (11.08.05 12:33) [13]
- а кто имел что то против ?


sniknik   (2005-08-11 12:37:00) [7]

msguns ©   (11.08.05 12:33) [13]
можно всю базу(любую) загнать в одну таблицу... удобнее разносить в разные.

для показанного примера я бы сделал именно 2 таблици, отделы и должности (с полем ссылки на отдел). но никак не дерево.


worldmen   (2005-08-11 12:36:00) [8]


> а деревья это всетаки нечто другое, для неопределенного
> количества узлов и неравномерное

Я понял. Спасибо.


msguns   (2005-08-11 12:33:00) [9]

>sniknik ©   (11.08.05 12:27) [7]
>отделы и должности в разные таблицы и сделать связь.

Должности - отдельная таблица-справочник.
Структура же с любым кол-вом "этажей" (уровнем вложенности) спокойно "влазит" в одну таблицу, типовую структуру (рыбу) которой ты сам же и привел ;)


ANB   (2005-08-11 12:32:00) [10]


> msguns ©   (11.08.05 12:29) [10]
- это структура отделов - дерево. А мешать должности и отделы в одну таблицу - изгал полный.


ANB   (2005-08-11 12:31:00) [11]


> worldmen ©   (11.08.05 12:28) [8]
- не будет удобнее. Народ захочет видеть не только названия отделов и должностей - и ты попал. Плюс, таблица в виде дерева плоховато обрабатывается стандартными средствами. Если очень хочешь смотреть в виде дерева - возьми Quantum Grid. Он умеет связки деревом показывать.


msguns   (2005-08-11 12:29:00) [12]

>ANB ©   (11.08.05 12:20) [4]
>Дык у тебя по задаче классический мастер-детал. Тут явно 2 таблицы нужны. Зачем тут дерево ?

В деревню ! В глушь ! В Саратов ! К тетке !

Структура предмприятия - типичное "дерево". Ну ты даешь ;)))


ANB   (2005-08-11 12:28:00) [13]


> linesoft ©   (11.08.05 12:25) [6]
- стандартный способ создания деревьев. В оракле можно его обычным запросом развернуть в любую сторону. Тольк циклов быть не должно.


> Reindeer Moss Eater ©   (11.08.05 12:23) [5]
- а констрейнты ?


worldmen   (2005-08-11 12:28:00) [14]

> Тут явно 2 таблицы нужны.
Я так и сделал, но думал деревом будет удобней выводить информацию в компонент TTreeView.


sniknik   (2005-08-11 12:27:00) [15]

стандартно
Create teble tebleName (ID Int, IDParent Int, Name Char(30))

но у тебя двухуровневый справочник (пример), больше не будет?
тогда дерево не нужно, лучше разнести в  отделы и должности в разные таблицы и сделать связь.
а деревья это всетаки нечто другое, для неопределенного количества узлов и неравномерное.


linesoft   (2005-08-11 12:25:00) [16]

>создается в одной таблице. И ссылка с одного поля идет на другое
Я где-то пропустил что-то интересное !!!?


Reindeer Moss Eater   (2005-08-11 12:23:00) [17]

create table wooden_table(
id number,
pid number,
name varchar(x)
)


ANB   (2005-08-11 12:20:00) [18]

Дык у тебя по задаче классический мастер-детал. Тут явно 2 таблицы нужны. Зачем тут дерево ?


worldmen   (2005-08-11 12:18:00) [19]

Насколько я знаю дерево создается в одной таблице. И ссылка с одного поля идет на другое (дочернее). Как пишется Create teble...?


ANB   (2005-08-11 12:10:00) [20]

В начинающим надо перенести.


Страницы:   1 2

Наверх

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