Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.014 c
1-1225102426
apic
2008-10-27 13:13
2009.11.22
Дескриптор формы-родителя


8-1200823353
Zy()ma
2008-01-20 13:02
2009.11.22
Как воспроизвести звук


1-1225290742
self.name
2008-10-29 17:32
2009.11.22
сделать запись в себя...


15-1253622103
cwl
2009-09-22 16:21
2009.11.22
скрипт для Delphi


2-1254735726
Серый
2009-10-05 13:42
2009.11.22
query, dbgrid размер ячеек




   Наверх