мы можем иметь внешний ключ, который не является первичным ключом в любой другой таблице? - PullRequest
36 голосов
/ 24 мая 2010

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

Ответы [ 4 ]

42 голосов
/ 24 мая 2010

Да - у вас может быть внешний ключ, который ссылается на уникальный индекс в другой таблице.

CREATE UNIQUE INDEX UX01_YourTable ON dbo.YourTable(SomeUniqueColumn)

ALTER TABLE dbo.YourChildTable
   ADD CONSTRAINT FK_ChildTable_Table
   FOREIGN KEY(YourFKColumn) REFERENCES dbo.YourTable(SomeUniqueColumn)
14 голосов
/ 24 мая 2010

По определению, внешний ключ должен ссылаться на ключ-кандидат некоторой таблицы. Это не обязательно должен быть первичный ключ.

В деталях ограничение, называемое FOREIGN KEY в SQL, не совсем эквивалентно определению внешнего ключа в реляционной модели в учебнике. Ограничение FOREIGN KEY в SQL отличается тем, что:

  • он может ссылаться на любой набор столбцов, на которые распространяется ограничение уникальности, даже если они не являются ключами-кандидатами (например, суперключами или столбцами, допускающими значения NULL).
  • может содержать нули, в этом случае ограничение не применяется
  • его синтаксис зависит от порядка столбцов, поэтому ограничение fk для ссылок (A, B) (A, B) отличается от ограничения для ссылок (B, A) (A, B).
3 голосов
/ 25 сентября 2015

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

Так что возможно, что внешний ключ является уникальным ключом в другой таблице.

0 голосов
/ 03 октября 2017

Общий стандартный ответ - нет.Это возможно только в том случае, если внешний ключ ссылается на какой-либо столбец однозначно в другой таблице.Это означает, что внешний ключ должен быть ключом-кандидатом в другой таблице, а первичный ключ также является ключом-кандидатом таблицы.

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