![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создать дерево в БД. [D7, IB6.x, FireBird]
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]В начинающим надо перенести.