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

Пишу под 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
07.12.2007, 18:57
    #34995240
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два foreign key на одну и ту же таблицу
В принципе эта ситуация возможна. В оракле поддерживается.

Код: 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
07.12.2007, 19:30
    #34995321
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два foreign key на одну и ту же таблицу
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
07.12.2007, 20:20
    #34995377
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два foreign key на одну и ту же таблицу
Snaky MafiaПодскажите, пожалуйста, возможно ли иметь два foreign key на один и тот же столбик из одной и той же таблицы или это в принцыпе невозможно. И второе -- можно ли добавить к этим ключам каскадное удаление/обновление?
Спасибо
два ключа иметь можно, добавить к ним обоим каскадное удаление(обновление) не получится. Тригером.
...
Рейтинг: 0 / 0
07.12.2007, 20:21
    #34995378
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два foreign key на одну и ту же таблицу
Теоретических ограничений нет. Но есть конкретные реализации. У меня была спецификация сборочных единиц на MSDE2000ReleaseA и я ссылался на справочник номенклатуры из поля СборочнаяЕдиница и ВходящаяВСборочнуюЕдиницу. Все казалось простым. И что же? Оказывается нельзя давать две ссылки на одну таблицу CASCADE UPDATE. По каким-то прчинам MSDE200ReleaseA считал этот вариант слишком сложным. Но можно было задать одно и только одно каскадное INTERGITY и любое количество STRICT.
...
Рейтинг: 0 / 0
07.12.2007, 20:23
    #34995381
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два foreign key на одну и ту же таблицу
здесь посмотрите и в BOL все однозначно описано.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Два foreign key на одну и ту же таблицу / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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