識別関係と非識別関係の違いは何ですか?
Whats Difference Between Identifying
解決:
NS 識別関係 子テーブルの行の存在が親テーブルの行に依存する場合です。最近では子テーブルの疑似キーを作成するのが一般的であるため、これは混乱を招く可能性がありますが、 いいえ 子の主キーの親部分への外部キーを作成します。正式には、これを行うための「正しい」方法は、外部キーを子の主キーの一部にすることです。しかし、論理的な関係は、子は親なしでは存在できないということです。
例:A
人は1つ以上の電話番号を持っています。電話番号が1つしかない場合は、次の列に保存するだけで済みます。
人。複数の電話番号をサポートしたいので、2番目のテーブルを作成します
PhoneNumbers、その主キーには
を参照するperson_id
人のテーブル。
電話番号は、別のテーブルの属性としてモデル化されている場合でも、個人のものと考えることができます。これは、これが識別関係であるという強力な手がかりです(文字通り含まれていなくても)
の主キーのperson_id
電話番号)。
に 非識別関係 親の主キー属性が してはいけません 子の主キー属性になります。この良い例は、外部キーなどのルックアップテーブルです。
の主キーを参照するPerson.state
States.state。
人はに関して子テーブルです
州。しかし、の行
人はそのによって識別されません
状態属性。 NS。
状態はの主キーの一部ではありません
人。
非識別関係は次のようになります オプション また 必須 、これは、外部キー列がそれぞれNULLを許可または禁止することを意味します。
関係の特定と非特定についてまだ混乱しているという私の答えも参照してください。
現実の世界から別の説明があります:
1冊の本は所有者のものであり、所有者は複数の本を所有できます。ただし、本は所有者がいなくても存在する可能性があり、所有権は所有者ごとに変わる可能性があります。本と所有者の関係は、識別できない関係です。
ただし、1冊の本は著者によって書かれているため、著者は複数の本を書いている可能性があります。しかし、本は著者によって書かれる必要があります-それは著者なしでは存在できません。したがって、本と著者の関係は識別関係です。
ビルの答えは正しいですが、それは 見て衝撃的 他のすべての答えの中で、誰も最も重要な側面を指摘していません。
識別関係では、子供は親なしでは存在できないと何度も言われてきました。 (例:user287724)。これは真実ですが、完全に要点を見逃しています。外部キーがあれば十分です ゼロ以外 これを達成するために。主キーの一部である必要はありません。
だからここに本当の理由があります:
関係を特定する目的は、 外部キーは決して変更できません 、主キーの一部であるため...したがって識別!!!