1

外部キーは一意である必要がありますか?

ユーザーと列「profileIconId」を参照する外部キーを格納するテーブルを作成しようとしています。テーブルの目的は、ユーザーが所有するアイコンのリストを持つことです。カスケード削除を使用したいと思います。

私の他の選択肢はSELECT FROM WHERE、リストを取得するために使用DELETE FROM WHEREし、ユーザーが削除されたときにキーに一致するすべての行を削除するために使用することです。

4

5 に答える 5

7

いいえ、そうではありません。実際、外部キーの最も一般的な用途の 1 つは、たとえばCustomersOrdersの間などの 1 対多の関係です。

于 2013-02-27T13:53:24.163 に答える
4

いいえ、テーブルの外部キーは、そのテーブルで一意である必要はありません。

ただし、これは別のテーブルの主キーであるため、このテーブル内で一意である必要があります。

于 2013-02-27T14:06:57.803 に答える
3

いいえ。

ただし、値をテーブルに挿入する前に、値が最初に親テーブルに存在する必要があります。

于 2013-02-27T13:52:34.307 に答える
3

いいえ、外部キーは一意である必要はありません。実際、1 対多または多対多の関係では、一意性の欠如が必須です。

于 2013-02-27T13:53:12.197 に答える
0

外部キーは、参照されるテーブル内の一意の属性セットを参照する必要があります。したがって、外部キー: userprofileIconIdは一意である必要はありませんが、それらが参照するものは一意である必要があります。

次のスキーマを検討してください。

CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  ... omitted ...
);

CREATE TABLE icons (
  id INTEGER PRIMARY KEY,
  ... omitted ...
);

CREATE TABLE user_icons (
  user INTEGER REFERENCES users,
  profileIconId INTEGER REFERENCES icons
);

userおよびのprofileIconId値は、user_iconsテーブル内で一意である必要はありませんがidusersおよび内では一意であるicons必要があります (または技術的には主キーの候補)。

この場合に参照される列は、主キーとしての資格を得るために一意である必要があることに注意してください。

これは、ユーザーがゼロまたは多数のアイコン関係を持つテーブルを作成するという目標を達成するための許容可能な方法です。

于 2021-09-11T00:49:58.433 に答える