web-dev-qa-db-ja.com

他のテーブルの主キーではない外部キーを持つことができますか?

すべての本で、外部キーは実際には他のテーブルの主キーであると書かれていますが、他のテーブルの主キーではない外部キーを使用できますか

37
Mac

はい-別のテーブルの一意のインデックスを参照する外部キーを持つことができます。

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
marc_s

定義により、外部キーはいくつかのテーブルの候補キーを参照する必要があります。必ずしも主キーである必要はありません。

詳細については、SQLでFOREIGN KEYと呼ばれる制約は、リレーショナルモデルでの外部キーの教科書定義と完全に同じではありません。 SQLのFOREIGN KEY制約は、次の理由で異なります。

  • 候補キーではない場合でも、一意性制約の対象となる列のセット(スーパーキーやnull許容列など)を参照できます。
  • nullを含めることができます。その場合、制約は適用されません。
  • その構文は列の順序に依存するため、(A、B)を参照する(A、B)のfk制約は、(A、B)を参照する(B、A)の制約とは異なります。
14
nvogel

はい、一意のキーは主キーのサブセットですが正確な主キーではないため、他のテーブルでは一意のキーである外部キーが存在する可能性があります。

したがって、外部キーが別のテーブルの一意のキーである可能性があります。

3
Giriraj Gupta

一般的な標準的な答えはノーです。外部キーが他のテーブルの列を一意に参照している場合にのみ可能です。つまり、外部キーは他のテーブルの候補キーでなければならず、主キーもテーブルの候補キーです。

0
Riaj Ferdous