私が知っているように、オプション性とは、オプションからオプション、必須からオプション、必須から必須として示される関係の最小カーディナリティを意味します。
太字と通常の線で示される参加。
インターネットでは、参加をエンティティの依存関係と呼ぶ人もいます。これは、関係の識別と非識別のようにも見えます。
そしてそれを最小カーディナリティと呼ぶ人もいます
これらの関係の正しい定義とは何か、違いは何ですか。
各概念の定義と例から始めましょう。
合計および部分的な参加:
合計参加(二重または太い関連付け線で示される)は、エンティティセット内のすべてのエンティティが関係に参加する必要があることを意味します。部分的な参加(単一の細い線で示される)は、関係に参加しないエンティティがエンティティセットに存在する可能性があることを意味します。
Medicine
は、Produce
関係に完全に参加しています。つまり、Medicine
がProduced
によってLaboratory
でない限り、存在することはできません。対照的に、Laboratory
は、Producing
Medicine
なしで存在できます。Laboratory
は、Produce
リレーションシップに部分的に参加します。
必須およびオプションの役割:
関係では、役割はオプションでも必須でもかまいません。これは、関係インスタンスが特定の役割のエンティティなしで存在できるかどうかに影響します。必須の役割は実線の関連線で示され、オプションの役割は点線で示されています。
ロールはデータベースチュートリアルで頻繁に取り上げられることはありませんが、重要な概念です。結婚について考えてみましょう-同じエンティティセットによって満たされた2つの必須の役割との関係。ほとんどの関係では、エンティティセットも役割を定義しますが、エンティティセットが単一の関係で複数回出現する場合、それらを異なる役割で区別します。
上記の例では、Patient
はPurchase
の有無にかかわらずMedicine
Prescription
にすることができます。 Purchase
は、Patient
とMedicine
なしでは存在できませんが、Prescription
はオプションです(特定のケースで必要になる場合もありますが)。
識別関係/弱いエンティティ:
弱いエンティティとは、それ自体の属性で識別できないエンティティであり、そのエンティティの一部として別のエンティティのキーを持っています。識別関係は、弱いエンティティとその親エンティティの間の関係です。識別関係と弱いエンティティーの両方が二重の境界線で示されています。弱いエンティティセットは、識別関係に完全に参加する必要があります。
この例では、Prescription
にはLineItems
のキーと行番号で識別されるPrescription
が含まれています。つまり、LineItems
テーブルには複合キー(Prescription_ID, Line_Number)
。
非識別関係の例については、前の例を参照してください。 Medicine
は完全にProduce
関係に参加しますが、独自のIDを持っています(たとえば、サロゲートキーですが、指定しませんでした)。代理キーは常に通常のエンティティを意味することに注意してください。
必須/オプションvs合計/部分参加
必須またはオプションの役割は、関係が存在するために特定の役割(および関連するエンティティセット)が必要かどうかを示します。全体的または部分的な参加は、エンティティが存在するために特定の関係が必要かどうかを示します。
必須の部分参加:上記を参照:Laboratory
は医薬品を生産せずに存在できますが、Medicine
はProduced
なしでLaboratory
にすることはできません。
必須の合計参加:上記を参照してください:Medicine
は、Produced
でなければ、存在できません。また、Laboratory
は、指定されていないものをProduce
にすることはできません。
オプションの部分参加:上記を参照:Prescription
はPurchased
でなくても存在でき、Purchase
はPrescription
なしで存在できます。
それはオプションの合計参加を残します、私は例を見つけるために少し考える必要がありました:
不明なPatients
のDie
Cause
がいくつかありますが、Cause
Patient
がないと、死のDying
は存在できません。
合計/部分的な参加と特定/非特定の関係
前に述べたように、弱いエンティティセットは、常にそれらの識別関係に完全に参加します。上記を参照してください。LineItem
はContained
ではPrescription
である必要があります。IDと存在はそれに依存します。特定の関係に部分的に参加することはできません。
完全な参加は、識別関係を意味するものではありません。Medicine
は、Produced
によってLaboratory
にならないと存在できませんが、Medicine
は独自の属性によって識別されます。
身元不明の関係への部分的な参加は非常に一般的です。たとえば、Medicine
はPurchased
でなくても存在でき、Medicine
は独自の属性によって識別されます。
必須/オプションvs識別/非識別関係
関係の必須の役割が2つ未満であるのは珍しいことです。識別関係はバイナリ関係であるため、親と子の役割は必須です。Contain
とPrescription
の間のLineItem
関係は、両方のエンティティなしでは存在できません。
オプションの役割は通常、三元以上の関係でのみ見られ(原因が死亡する患者の例を参照)、特定には関与しません。オプションの役割の代わりに、関係の関係があります。
Purchase
を関連エンティティに変換することで、Fill
とのPrescription
関係に参加させることができます。上記と同じセマンティクスを維持するために、Purchase
はFill
に1つだけPrescription
を指定できると指定しました。
物理モデリング
概念モデルから物理モデルに変換して(論理モデリングをスキップし、さらに正規化して)、エンティティと関係ごとに個別のテーブルを作成すると、状況はかなり似ていますが、外部キー行のカーディナリティインジケーターを読み取って、 ERセマンティクス。
ただし、同じ主キーを持つテーブルを非正規化することは一般的です。つまり、1対多の関係が多側のエンティティテーブルと結合されます。
関係は、テーブル内の2つ以上のエンティティキーとして物理的に表されます。この場合、エンティティキー-patient_id
およびcause_of_death_id
はどちらもPatient
テーブルにあります。多くの人々は、外部キーラインが関係を表していると考えていますが、これは、エンティティ関係モデルと古いネットワークデータモデルを混同しているためです。
これは重要なポイントです。さまざまな種類の関係と関係の制約を理解するためには、どの関係が最初にあるかを理解することが不可欠です。 ERの関係は、テーブル間ではなく、キー間の関連付けです。関係は、異なるエンティティセットの任意の数のロールを持つことができますが、外部キー制約は、1つのエンティティセットの2つの列間にサブセット制約を適用します。さて、この知識で武装して、私の答え全体をもう一度読んでください。 ;)
これがお役に立てば幸いです。お気軽にご質問ください。