Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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)

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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