Столбец SQL ForeignKey - PullRequest
       3

Столбец SQL ForeignKey

1 голос
/ 24 августа 2010

Если я использую ForeignKey в SQL, всегда ли нужно использовать все столбцы таблицы, на которую я ссылаюсь?

Так, например.

Table1

subjectIDимя фамилия электронная почта

Таблица 2:

автомобильные книги Foreignkey (SubjectID)

Могу ли я использовать только один столбец в качестве Foreignkey или мне всегда нужно получать все столбцы?

Спасибо!

Ответы [ 3 ]

1 голос
/ 24 августа 2010

Внешний ключ должен ссылаться на уникальный ключ, обычно первичный ключ.

Итак, если родительская таблица имеет один столбец в своем первичном ключе, который является единственным столбцом, который необходимо использовать во внешнем ключе.Если родительская таблица имеет составной первичный ключ (то есть несколько столбцов), то вам нужны все эти столбцы в дочерней таблице.

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

Вот рабочий пример (с использованием Oracle, но он работает одинаково во всех разновидностях СУБД).Сначала мы создаем родительскую таблицу с первичным ключом из одного столбца и ссылаемся на нее из дочерней таблицы.

SQL> create table t1 (id number not null, seqno number not null)
  2  /

Table created.

SQL> alter table t1 add constraint t1_pk primary key (id)
  2  /

Table altered.

SQL> create table t2 (id number not null, t1_id number not null, whatever varchar2(10) )
  2  /

Table created.

SQL> alter table t2 add constraint t2_t1_fk foreign key (t1_id)
  2             references t1 (id)
  3  /

Table altered.

SQL>

Достаточно просто.Но если мы отбросим эти ключи и дадим T1 составные первичные ключи, все рухнет ...

SQL> alter table t2 drop constraint  t2_t1_fk
  2  /

Table altered.

SQL> alter table t1 drop constraint  t1_pk
  2  /

Table altered.


SQL> alter table t1 add constraint t1_pk primary key (id, seqno)
  2  /

Table altered.

SQL> alter table t2 add constraint t2_t1_fk foreign key (t1_id)
  2             references t1 (id)
  3  /
           references t1 (id)
                          *
ERROR at line 2:
ORA-02270: no matching unique or primary key for this column-list


SQL> 

Нам нужно добавить соответствующий второй столбец в дочернюю таблицу и включить его в определение внешнего ключа:

SQL> alter table t2 add t1_seqno number
  2  /

Table altered.

SQL> alter table t2 add constraint t2_t1_fk foreign key (t1_id, t1_seqno)
  2             references t1 (id, seqno)
  3  /

Table altered.

SQL>
1 голос
/ 24 августа 2010

Вы можете использовать только выбранный столбец или комбинацию всех столбцов в качестве внешнего ключа.

0 голосов
/ 24 августа 2010

Проще говоря, первичный ключ таблицы используется как внешний ключ в других таблицах. Мы не используем все столбцы таблицы в качестве внешних ключей в других таблицах (это снова приведет к избыточности, что опять-таки является проблематичным).

Кроме того, вы можете иметь первичный ключ , уникальные ключи , первичные ключи + "некоторый другой столбец" и т. Д. В качестве внешних ключей в других таблицах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...