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

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

37
задан APC 7 September 2010 в 04:41
поделиться

2 ответа

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

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)
43
ответ дан 27 November 2019 в 04:46
поделиться

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

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

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

Похожие вопросы: