外部キーは一意である必要がありますか?
ユーザーと列「profileIconId」を参照する外部キーを格納するテーブルを作成しようとしています。テーブルの目的は、ユーザーが所有するアイコンのリストを持つことです。カスケード削除を使用したいと思います。
私の他の選択肢はSELECT FROM WHERE
、リストを取得するために使用DELETE FROM WHERE
し、ユーザーが削除されたときにキーに一致するすべての行を削除するために使用することです。
いいえ、そうではありません。実際、外部キーの最も一般的な用途の 1 つは、たとえばCustomersとOrdersの間などの 1 対多の関係です。
いいえ、テーブルの外部キーは、そのテーブルで一意である必要はありません。
ただし、これは別のテーブルの主キーであるため、このテーブル内で一意である必要があります。
いいえ。
ただし、値をテーブルに挿入する前に、値が最初に親テーブルに存在する必要があります。
いいえ、外部キーは一意である必要はありません。実際、1 対多または多対多の関係では、一意性の欠如が必須です。
外部キーは、参照されるテーブル内の一意の属性セットを参照する必要があります。したがって、外部キー: userとprofileIconIdは一意である必要はありませんが、それらが参照するものは一意である必要があります。
次のスキーマを検討してください。
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
テーブル内で一意である必要はありませんがid
、users
および内では一意であるicons
必要があります (または技術的には主キーの候補)。
この場合に参照される列は、主キーとしての資格を得るために一意である必要があることに注意してください。
これは、ユーザーがゼロまたは多数のアイコン関係を持つテーブルを作成するという目標を達成するための許容可能な方法です。