powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Два foreign key на одну и ту же таблицу
6 сообщений из 6, страница 1 из 1
Два foreign key на одну и ту же таблицу
    #34995173
Snaky Mafia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Извините за возможно вопрос "для чайников". Ситуация такая должна встречатся очень часто у людей.

Пишу под ADO.NET 2.0 (SQL Server 2005)

Есть таблица сотрудников, в которой они все перечислены.
Есть таблица приказов, в которой говорится "кто, кому и что приказывает".


Таблица Coworkers

id (primary key),
name, ...


Таблица Orders.

id (primary key),
idPersonOrderGiver (foreign key to People[id]),
idPersonOrderTaker (foreign key to People[id]),
orderText.

Т.е. у нас два foreign key на одну и ту же таблицу и в ней на один и тот же столбик. Почему-то дизайнер DataSet в Visual Studio 2005 не поддерживает такой расклад (пишет что на один и тот же столбец ссылаться нельзя) + сам SQL Server не дает сделать два таких "заграничных" ключа, если используется какскадное удаление и обновление.

Подскажите, пожалуйста, возможно ли иметь два foreign key на один и тот же столбик из одной и той же таблицы или это в принцыпе невозможно. И второе -- можно ли добавить к этим ключам каскадное удаление/обновление?
Спасибо
...
Рейтинг: 0 / 0
Два foreign key на одну и ту же таблицу
    #34995240
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе эта ситуация возможна. В оракле поддерживается.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> create table pass(id number primary key, name varchar2( 30 ));

Таблица создана.

SQL> create table marriage certificate
   2   .
SQL> edi
Записано file afiedt.buf

   1 * create table marriage_certificate (husband references pass, wife references pass)
SQL> /

Таблица создана.

SQL> 


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SQL> create table marriage_certificate (
   2     husband references pass on delete cascade,
   3     wife references pass on delete cascade
   4   );

Таблица создана.

SQL> 
...
Рейтинг: 0 / 0
Два foreign key на одну и ту же таблицу
    #34995321
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snaky MafiaПодскажите, пожалуйста, возможно ли иметь два foreign key на один и тот же столбик из одной и той же таблицы или это в принцыпе невозможно.
Это совершенно нормальная, рядовая ситуация. Рекорд, который был у меня - кажется, четыре таких вот "параллельных" ссылки.

Snaky MafiaИ второе -- можно ли добавить к этим ключам каскадное удаление/обновление?
Каких-то теоретических ограничений на этот счет не существует.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Connected to Oracle Database 10g Enterprise Edition Release  10 . 1 . 0 . 2 . 0  
Connected as test

SQL> create table dict as select rownum id, to_char (rownum) data from dual connect by level <=  10 ;

Table created

SQL> create table ref as select rownum id, rownum ref1, rownum+ 5  ref2 from dual connect by level <=  5 ;

Table created

SQL> alter table dict add primary key (id);

Table altered

SQL> alter table ref add constraint ref_fk1 foreign key (ref1) references dict (id) on delete cascade;

Table altered

SQL> alter table ref add constraint ref_fk2 foreign key (ref2) references dict (id) on delete cascade;

Table altered

SQL> select * from ref;

        ID       REF1       REF2
---------- ---------- ----------
          1            1            6 
          2            2            7 
          3            3            8 
          4            4            9 
          5            5           10 

SQL> delete from dict where id in ( 1 ,  8 );

 2  rows deleted

SQL> select * from ref;

        ID       REF1       REF2
---------- ---------- ----------
          2            2            7 
          4            4            9 
          5            5           10 
...
Рейтинг: 0 / 0
Два foreign key на одну и ту же таблицу
    #34995377
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snaky MafiaПодскажите, пожалуйста, возможно ли иметь два foreign key на один и тот же столбик из одной и той же таблицы или это в принцыпе невозможно. И второе -- можно ли добавить к этим ключам каскадное удаление/обновление?
Спасибо
два ключа иметь можно, добавить к ним обоим каскадное удаление(обновление) не получится. Тригером.
...
Рейтинг: 0 / 0
Два foreign key на одну и ту же таблицу
    #34995378
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теоретических ограничений нет. Но есть конкретные реализации. У меня была спецификация сборочных единиц на MSDE2000ReleaseA и я ссылался на справочник номенклатуры из поля СборочнаяЕдиница и ВходящаяВСборочнуюЕдиницу. Все казалось простым. И что же? Оказывается нельзя давать две ссылки на одну таблицу CASCADE UPDATE. По каким-то прчинам MSDE200ReleaseA считал этот вариант слишком сложным. Но можно было задать одно и только одно каскадное INTERGITY и любое количество STRICT.
...
Рейтинг: 0 / 0
Два foreign key на одну и ту же таблицу
    #34995381
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здесь посмотрите и в BOL все однозначно описано.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Два foreign key на одну и ту же таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]