Форум: "Базы";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
ВнизРекурсивный внешний ключ на саму запись Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c