違いを完全に把握できていません。両方の概念を説明し、実際の例を使用できますか?
15 に答える
識別関係とは、子テーブル内の行の存在が親テーブル内の行に依存する場合です。子テーブルの疑似キーを作成するのが最近の一般的な方法であるため、これは混乱を招く可能性がありますが、子の主キーの親部分への外部キーは作成しません。正式には、これを行う「正しい」方法は、外部キーを子の主キーの一部にすることです。しかし論理的な関係は、子は親なしでは存在できないということです。
例: A
Person
は 1 つ以上の電話番号を持っています。電話番号が 1 つしかない場合は、単純に の列に格納できますPerson
。複数の電話番号をサポートしたいので、テーブルを参照PhoneNumbers
する主キーを含む2 番目のテーブルを作成します。person_id
Person
電話番号は別のテーブルの属性としてモデル化されていますが、個人のものと考えることができます。これは、これが識別関係であることの強力な手がかりです (たとえ
person_id
の主キーに文字通り含まれていなくてもPhoneNumbers
)。非識別関係とは、親の主キー属性が子の主キー属性になってはならない場合です。
Person.state
これの良い例は、 の主キーを参照する外部キーなどのルックアップ テーブルですStates.state
。Person
に関する子テーブルStates
です。ただし、行はその属性Person
によって識別されません。state
つまりstate
、の主キーの一部ではありませんPerson
。非識別関係は、オプションまたは必須にすることができます。これは、外部キー列がそれぞれ NULL を許可または NULL を許可しないことを意味します。
識別関係と非識別関係についてまだ混乱している への私の回答も参照してください
現実の世界から別の説明があります:
1冊の本は所有者のものであり、所有者は複数の本を所有できます。ただし、本は所有者がいなくても存在する可能性があり、所有権は所有者ごとに変わる可能性があります。本と所有者の関係は、身元を特定できない関係です。
ただし、1冊の本は著者によって書かれており、著者は複数の本を書いている可能性があります。しかし、本は著者によって書かれる必要があります-それは著者なしでは存在できません。したがって、本と著者の関係は識別関係です。
識別関係は、子オブジェクトが親オブジェクトなしでは存在できないことを指定します
非識別関係は、オブジェクト間の通常の関連付け、1:1 または 1:n カーディナリティを指定します。
非識別関係は、親テーブルのカーディナリティを設定することにより、親が必要ない場合はオプションとして、または親が必要な場合は必須として指定できます...
ここに良い説明があります:
2 つのエンティティ間の関係は、「識別」または「非識別」のいずれかに分類できます。親エンティティの主キーが子エンティティの主キーに含まれている場合、識別関係が存在します。一方、親エンティティの主キーが子エンティティに含まれているが、子エンティティの主キーの一部として含まれていない場合、非識別関係が存在します。さらに、非識別関係は、「必須」または「非必須」のいずれかにさらに分類される場合があります。子テーブルの値を null にすることができない場合、必須の非識別関係が存在します。一方、子テーブルの値が null になる可能性がある場合は、必須ではない非識別関係が存在します。
http://www.sqlteam.com/article/database-design-and-modeling-fundamentals
識別関係の簡単な例を次に示します。
Parent
------
ID (PK)
Name
Child
-----
ID (PK)
ParentID (PK, FK to Parent.ID) -- notice PK
Name
対応する非識別関係は次のとおりです。
Parent
------
ID (PK)
Name
Child
-----
ID (PK)
ParentID (FK to Parent.ID) -- notice no PK
Name
親が削除されたときに子アイテムを削除する必要があると考える場合、それは識別関係です。
親が削除されても子アイテムを保持する必要がある場合、それは非識別関係です。
例として、研修生、トレーニング、卒業証書、およびトレーニング セッションを含むトレーニング データベースがあります。
- 研修生は、研修セッションとの識別関係を持っています
- トレーニングは、トレーニング セッションとの識別関係を持っています。
- しかし、研修生は卒業証書と非識別関係を持っています
関連する研修生、トレーニング、または卒業証書のいずれかが削除された場合は、トレーニング セッションのみを削除する必要があります。
識別関係とは、子エンティティが親エンティティの存在に完全に依存していることを意味します。
例account テーブル person テーブルと personAccount。person アカウント テーブルは、account テーブルと person テーブルの存在によってのみ識別されます。
非識別関係とは、子テーブルが親テーブルの存在によって識別されないことを意味します。
例accountType および account.accountType テーブルとしてのテーブルは、アカウント テーブルの存在で識別されません。
識別関係は、2 つの強力なエンティティ間にあります。非識別関係は、強い実体と弱い実体の間の関係であるとは限りません。子自体が主キーを持っているが、そのエンティティの存在が親エンティティに依存しているという状況が存在する場合があります。
例: 売り手が本を販売している売り手と本の間の関係は、売り手が独自の主キーを持つ可能性がありますが、そのエンティティは本が販売されている場合にのみ作成されます。
ビル・カーウィンに基づく参照