|
|
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
Подскажите как лучше реализовать таблицу с иерархической рекурсивной связью..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2006, 01:28 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
MrStudentПодскажите как лучше реализовать таблицу с иерархической рекурсивной связью..... Классический вариант: ID - PARENT_ID А для разнообразия можно почитать Joe Celco, у него была серия статей про деревья в SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2006, 02:09 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
а для вершины в PArent_ID какое значение необходимо указать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2006, 14:21 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
я имел ввиду корень не понятно как лучше делать с FK или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2006, 16:14 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
ID PARENT_ID NAME 1 0 Корень 2 1 Лист 3 1 Узел 4 3 Лист 5 3 Лист Наличие FK логично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2006, 20:57 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
Возник вопрос я реализую таблицу следующим образом CREATE TABLE Group_of_disks ( GroupId int primary key not null identity(1,1), type varchar(100) not NULL, ParentGroupId int null , FOREIGN KEY (ParentGroupId) REFERENCES Group_of_disks on delete cascade ) go такая реализация на ваш взгляд верна? и почему on delete cascade не хочет выполняться.... по-моему при удалении родителя нужно убирать и дочерние записи ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 17:09 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
Если не использовать FK, то тогда можно для корня назначить какое-либо значение ,те реализация будет следующей: CREATE TABLE Group_of_disks ( GroupId int primary key not null identity(1,1), type varchar(100) not NULL, ParentGroupId int not null , -- FOREIGN KEY (ParentGroupId) REFERENCES Group_of_disks on delete cascade ) go почему не выполняется on delete cascade мне не ясно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 17:13 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
Про on delete cascade я имел ввиду реализацию с FK Какой вариант на ваш взгляд лучше....? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 17:15 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
MrStudentЕсли не использовать FK, то тогда можно для корня назначить какое-либо значение ,те реализация будет следующей: CREATE TABLE Group_of_disks ( GroupId int primary key not null identity(1,1), type varchar(100) not NULL, ParentGroupId int not null , -- FOREIGN KEY (ParentGroupId) REFERENCES Group_of_disks on delete cascade ) go почему не выполняется on delete cascade мне не ясно Не выполняется вот почему. Представьте, что у вас в таблице данные такие: GroupId type ParentGroupId 1 'test1' 2 2 'test2' 1 при удалении любой из строк, каскадное удаление приведет к бесконечному циклу, на что и намекает вам Query Analyser :) Query AnalyserIntroducing FOREIGN KEY constraint 'FK__Group_of___Paren__6754599E' on table 'Group_of_disks' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Так что каскадное удаление не прокатит... Можете попробовать использовать триггер на before delete (хотя я триггеры не люблю за то что о них забываешь постоянно :) ) Имхо, лучший вариант - удаляйте запись из такой таблицы отдельной процедурой, которая умеет удалять узлы дерева начиная с листьев. А использовать FK надо по-любому. Для целостности данных. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 17:55 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
MrStudentпочему не выполняется on delete cascade мне не ясно Патамушта у вас галимый MSSQL Буээээ.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 18:07 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
Большое спасибо rgb-dart за ответ Тереь понятно ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 18:31 |
|
||
|
реализация таблицу
|
|||
|---|---|---|---|
|
#18+
ORACLE 8.1.7 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Логически бесконечный цикл при удалении не возможен - в худшем случае будут удалены все записи. Просто не все СУБД об этом знают :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 11:23 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=134&tid=1545098]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 388ms |

| 0 / 0 |
