Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.22;
Скачать: CL | DM;

Вниз

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

 
Sirus   (2008-12-17 08:07) [0]

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

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;


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


 
Johnmen ©   (2008-12-17 09:12) [1]

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


 
Sergey13 ©   (2008-12-17 09:22) [2]

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

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


 
Ega23 ©   (2008-12-17 10:45) [3]


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


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


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


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

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


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


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

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


 
Ega23 ©   (2008-12-17 13:23) [6]


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


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


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


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

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


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

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

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


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


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

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


 
Ega23 ©   (2008-12-17 13:39) [10]


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


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


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


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


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

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


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


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

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


 
ANB   (2008-12-17 17:56) [13]


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

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


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


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

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


 
Petr V. Abramov ©   (2008-12-18 13:49) [15]


> ANB   (17.12.08 17:56) [13]

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



Страницы: 1 вся ветка

Текущий архив: 2009.11.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
15-1253997011
Юрий
2009-09-27 00:30
2009.11.22
С днем рождения ! 27 сентября 2009 воскресенье


1-1216636968
apic
2008-07-21 14:42
2009.11.22
Перемещение ярлыков


2-1254891407
JohnKorsh
2009-10-07 08:56
2009.11.22
Работа с WiFi на низком уровне.


15-1253554559
Knight
2009-09-21 21:35
2009.11.22
Пользовательский интерфейс


2-1255265203
AlexDan
2009-10-11 16:46
2009.11.22
form2.memoN в rave reports..