Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1253437411
ford
2009-09-20 13:03
2009.11.22
регистрация домена


1-1225102590
apic
2008-10-27 13:16
2009.11.22
Рисунки в подсказках


2-1254829215
den49
2009-10-06 15:40
2009.11.22
Работа с потоками


2-1255058511
kyran29
2009-10-09 07:21
2009.11.22
Memo


15-1253441135
Aston
2009-09-20 14:05
2009.11.22
Компанент для создания игр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский