18

外部キー制約を設定する通常の方法は、外部キーが指すテーブルを選択することです。

1 つのテーブルと一連のテーブルの間にポリモーフィックな関係があります。

つまり、このテーブルは、セット内のテーブルの 1 つとリレーションを持つことになります。

例えば。

images: person_id, person_type
subordinates: id, col1, col2...col9
products: id, colA, colB...colZ

上記の例で、person_type が「subordinates」の場合、person_id は subordinates.id への外部キーである必要があり、製品も同様です。

だから、多くのテーブルの1つに外部キーを持つことは可能ですか、それともテーブルを割り当てるときにそれが指すテーブルを具体的に設定する必要がありますか?

この質問は、MySQL と PostgreSQL の両方を対象としています。

ありがとう

4

4 に答える 4

2

外部キーは、定義上、唯一無二のテーブルの主キーまたは候補キーのいずれかを指す必要があります。典型的な DBMS では主キーのみが使用可能です。単一の「個人」テーブルを用意し、これに関連するテーブル (マネージャー情報など) を用意することをお勧めします。

于 2010-08-01T19:00:00.920 に答える
1

列は、値の単なるプレースホルダーです。外部キー制約とは、その列内に格納されるデータは、制約で定義されたテーブルの列と一致する値のみであることを意味します。外部キー制約はテーブルごとです...

列に複数の外部キー制約を定義することを妨げるものは何もありません。ただし、これは、格納できる唯一の値が、他のすべての外部関連テーブルに既に存在する値であることを意味します。IE: TABLE_1 には値 1 と 2 があり、TABLE_2 には値 2 と 3 があります - TABLE_3 には、TABLE_3 のcol列のTABLE_3.colテーブル1 と 2 に定義された外部キー関係があります...仮定colは null 可能ではありません)。

于 2010-08-01T19:08:36.270 に答える
1

外部キーは、単一のテーブルのみを指すことができます。

ここで本当にやりたかったことは、persons テーブルに親 ID を作成することのように思えます。部下には、マネージャーを指す親 ID があります。部下に複数のマネージャーが必要な場合は、2 つの列を持つ別の結合テーブルを作成し、それぞれに個人 ID を含む 1 つは部下であり、もう 1 つはマネージャーの 1 人である可能性があります。

parentid フィールドに誰を割り当てることができるかを制限したい場合、これはチェック制約で行うことができます。

于 2010-08-01T19:08:43.673 に答える