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

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

Рекурсивный внешний ключ на саму запись


Sirus ©   (2008-12-17 08:07:00) 

Привет Мастера :)
Есть необходимость создания рекурсивного внешнего ключи на саму запись.

CREATE TABLE LCA_ACCPOINTS (
   CODE         D_APCODES NOT NULL /* D_APCODES = VARCHAR(10) */,
   CONSUMER     D_CONCODES NOT NULL /* D_CONCODES = VARCHAR(8) */,
   SUPPLIER     D_APCODES NOT NULL /* D_APCODES = VARCHAR(10) */,
   WORKHOUR     D_INT NOT NULL /* D_INT = INTEGER */,
   WORKDAY      D_INT NOT NULL /* D_INT = INTEGER */,
   OPENDATE     D_DATE NOT NULL /* D_DATE = DATE */,
   CLOSEDATE    D_DATE /* D_DATE = DATE */,
   TSTATION     D_CTLCODES NOT NULL /* D_CTLCODES = INTEGER */,
   STREET       D_CTLCODES NOT NULL /* D_CTLCODES = INTEGER */,
   HOUSE        D_HSAPS NOT NULL /* D_HSAPS = VARCHAR(4) */,
   APART        D_HSAPS /* D_HSAPS = VARCHAR(4) */,
   DESCRIPTION  D_DESCRIPTIONS /* D_DESCRIPTIONS = VARCHAR(255) */
);

ALTER TABLE LCA_ACCPOINTS ADD CONSTRAINT PK_LCA_ACCPOINTS_CODE PRIMARY KEY (CODE);

ALTER TABLE LCA_ACCPOINTS ADD CONSTRAINT FK_LCA_ACCPOINTS_CONSUMER FOREIGN KEY (CONSUMER) REFERENCES LCA_CONSUMERS (CODE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE LCA_ACCPOINTS ADD CONSTRAINT FK_LCA_ACCPOINTS_STREET FOREIGN KEY (STREET) REFERENCES CTL_STREETS (CODE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE LCA_ACCPOINTS ADD CONSTRAINT FK_LCA_ACCPOINTS_SUPPLIER FOREIGN KEY (SUPPLIER) REFERENCES LCA_ACCPOINTS (CODE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE LCA_ACCPOINTS ADD CONSTRAINT FK_LCA_ACCPOINTS_TSTATION FOREIGN KEY (TSTATION) REFERENCES ENC_TSTATIONS (CODE) ON DELETE CASCADE ON UPDATE CASCADE;


Вопрос: Чем это чревато и на какие подводные камни я могу натолкнуться?


Petr V. Abramov   (2008-12-18 13:49:00) [1]


> ANB   (17.12.08 17:56) [13]

героический армянскй комсомол :)


Правильный$Вася   (2008-12-17 18:06:00) [2]


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

снова обобщение на основании частного случая
я пользуюсь ограничениями, но при этом иерархию делаю и 2 таблицами, и одной - зависит от задачи


ANB   (2008-12-17 17:56:00) [3]


> весьма смелое утверждение

Ну не делают те, кто вообще ограничениями не пользуются. Например наша контора :)


Правильный$Вася   (2008-12-17 15:42:00) [4]


> Вопрос: а зачем плодить лишние сущности?

а это уже от задачи зависит
не все задачи и способы их решения одинаково хороши во всех случаях


Кщд   (2008-12-17 14:48:00) [5]

>Sirus   (17.12.08 08:07)
>Вопрос: Чем это чревато и на какие подводные камни я могу натолкнуться?
искать по "pig's ear"


Ega23   (2008-12-17 13:39:00) [6]


> напимер, на 2 таблицах


Вопрос: а зачем плодить лишние сущности?


> где-то мне на эту тему интересная статеюшка попадалась..
> . но ведь не найду.


Я их много читал в своё время. И варианты разные пробовал. Остановился на варианте с одной таблицей с id и parid и ключом на саму себя. Единственное, Root должен быть один (но за этим тоже СУБД следит).


Правильный$Вася   (2008-12-17 13:37:00) [7]


> где-то мне на эту тему интересная статеюшка попадалась

емнип, на королевстве


KSergey   (2008-12-17 13:33:00) [8]

> Ega23 ©   (17.12.08 13:23) [6]
> А как ты иначе иерархическую структуру построишь с проверкой
> ссылочной целостности на уровне СУБД?

где-то мне на эту тему интересная статеюшка попадалась... но ведь не найду.


Правильный$Вася   (2008-12-17 13:32:00) [9]


> Ega23 ©   (17.12.08 13:23) [6]

напимер, на 2 таблицах


Ega23   (2008-12-17 13:23:00) [10]


> весьма смелое утверждение


А как ты иначе иерархическую структуру построишь с проверкой ссылочной целостности на уровне СУБД?


Правильный$Вася   (2008-12-17 12:18:00) [11]


> Все так и делают.

весьма смелое утверждение


ANB   (2008-12-17 11:24:00) [12]


> Вопрос: Чем это чревато и на какие подводные камни я могу
> натолкнуться?

Да, собственно, вполне нормальная ситуация для парентовых деревьев. Все так и делают.
Вот только каскадное удаление, действительно, стремновато . . .


Ega23   (2008-12-17 10:45:00) [13]


> Вопрос: Чем это чревато и на какие подводные камни я могу
> натолкнуться?


Поскольку on delete cascade стоит, то при случайном удалении рутового элемента...


Sergey13   (2008-12-17 09:22:00) [14]

> [0] Sirus   (17.12.08 08:07)
> Вопрос: Чем это чревато и на какие подводные камни я могу натолкнуться?
Ответ: При кривой реализации можно натолкнуться на все что угодно. При нормальной реализации - это нормальная "деревянная" структура.

ЗЫ: Я конечно рискую опять спровоцировать спор про суррогатные ключи, но все таки - почему ПК - VARCHAR(10)?


Johnmen   (2008-12-17 09:12:00) [15]

В dBase нет внешних ключей.


Наверх

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