この回答は、「table3
に外部キーを追加する」という質問に答えます。 "FK(外部キー)がtable3
に追加されたことを意味します table4
の複合PK(主キー)の列の1つを参照する 。標準SQLでは、FKはPKの適切な/小さいサブセットを参照できます。
この他の回答
おそらく「table3
に外部キーを追加する」 "FKがtable4
に追加されたことを意味します table3
を参照するPKの列の1つ 。テーブルに設定されたFK列は、その中のPKまたはUNIQUE宣言から独立しています。
標準SQLでは、FKはPKの適切な/小さいサブセットを参照できます。
参照される列リストは、PRIMARYKEYまたはUNIQUEとして宣言する必要があります。 (PRIMARYKEYはUNIQUENOT NULL制約を作成します。)(UNIQUEであるセットを含むNOT NULL列のセットは一意である必要がありますが、制約は明示的である必要があります。)
残念ながら、MySQLでは、UNIQUEではない列リストを参照するFKを宣言できます。そのようなFKまたはNULL以外の列を参照するFK(標準SQLではOK)は適切に実装されておらず、ドキュメント自体はそれを行わないようにアドバイスしています:
(ドキュメントでは実際には明確にされていないため、明確に定義された操作とは何かを熟考することができます。)
1.8.2.3外部キーの違い>
13.1.18テーブルの作成構文
13.1.18.6FOREIGNの使用主な制約
PSReリレーショナルvsSQL
リレーショナルモデルでは、FKはCK(候補キー)を参照します。スーパーキーは、一意の列セットです。 CKは、小さいスーパーキーを含まないスーパーキーです。 1つのCKをPK(主キー)と呼ぶことができます。列セットの値を他の場所に表示する必要がある場合、IND(包含依存関係)があると言います。 FKはCKに対するINDです。 INDがスーパーキーに対するものである場合、それを「外部スーパーキー」と呼ぶことができます。
SQL PK
またはUNIQUE NOT NULL
スーパーキーを宣言します。 SQL PK
として宣言された小さい列セットが含まれていない場合はCKです。 またはUNIQUE NOT NULL
。 SQL FK
外国のスーパーキーを宣言します。したがって、SQLPKは実際には リレーショナルPK(したがってCK)とUNIQUENOTNULLは実際には CK。これらの1つに対するSQLFKは実際には リレーショナルFK。