データベースを設計しようとすると、最大カーディナリティと最小カーディナリティの違いを理解するのに苦労しています。
6 に答える
カーディナリティは常に別のものとの関係であることを忘れないでください。
最大カーディナリティ(カーディナリティ) 常に1または多数。クラスAはパッケージBと関係があり、カーディナリティは1です。つまり、パッケージ内でこのクラスが1回発生する可能性があります。反対に、パッケージの最大カーダニティがNである可能性があります。これは、N個のクラスが存在する可能性があることを意味します。
最小カーディナリティ(オプション) 単に「必須」を意味します。その常に0または1。0は0以上、1鉱石以上を意味します
これを説明する優れた記事がたくさんあります。その中には、 「図」のプロパティを作成する方法を説明するものもあります。検索できるもう1つのものは、同じことを説明するカーディナリティ/オプション(OMG用語)です。オプションは「最小」です。カーディナリティは「最大」です。
http://www.databasecentral.info/FAQ.htmから
Q:データテーブル間の関係を作成するときに最大カーディナリティがどのように使用されるかを確認できます。ただし、最小限のカーディナリティがデータベース設計にどのように適用されるかはわかりません。私は何が欠けていますか?
A:最小カーディナリティーよりも最大カーディナリティーが関係のより重要な特性であることに気付いたのは正しいです。すべての最小カーディナリティーは、関係が意味を持つためにテーブルが持つ必要のある最小許容行数であることを示しています。たとえば、バスケットボールチームには少なくとも5人のプレーヤーが必要です。そうでない場合、バスケットボールチームではありません。したがって、PLAYER側の最小カーディナリティーは5であり、TEAM側の最小カーディナリティーは1です。
チームに所属していない限り、プレーヤーになることはできないため、TEAMの最低カーディナリティが必須であると主張することができます。同様に、組織は少なくとも5人のプレーヤーがいない限り、バスケットボールチームになることはできません。PLAYERSの最小カーディナリティも必須です。反対の方向にも議論することができます。プレーヤーがチームを辞めた場合、交代要員が採用されるまでチームではなくなりますか?ゲームに参加することはできませんが、チームではなくなりますか?これは、個々の状況を独自の条件で評価する必要があるという事実の例です。この特定の例の真実は何ですか?次回同様の状況が発生した場合、状況が異なるため、決定が異なる場合があります。
他の答えに同意します、ここに少し異なる見方があります。オプション性と多様性の観点から考えてください。例を見てみましょう:Person
has Address
。
オプション性は尋ねます:すべてPerson
が持っている必要がありAddress
ますか?その場合、関係は無条件です。つまり、最小カーディナリティーは1です。そうでない場合、最小カーディナリティーは0です。
多重度の質問:与えられたPerson
ものに複数を含めることはできますAddress
か?そうでない場合、最大カーディナリティーは1です。そうである場合、最大カーディナリティーは>1です。ほとんどの場合、それは無制限であり、通常はN
またはで示され*
ます。
どちらも重要です。オプションではない関連付けにより、参照を解除する前に存在をテストする必要がないため、コードが単純になります。
a=person.address()
それ以外の
if (person.address !=null) {
a=person.address()
}
アドレスは、多重度が重要である理由の良い例です。あまりにも多くのビジネスアプリケーションは、各人が正確に1つの住所を持っていると想定しているため、別荘などがある場合は対応できません。
カーディナリティをさらに制限することは可能です。たとえば、自動車のエンジンには2〜12個のサイクリンダーがあります。ただし、これらの制約はあまり安定していないことがよくあります(Bugattiは現在16気筒エンジンを提供しています)。したがって、重要な質問はオプション性と多様性です。
hth。
最大カーディナリティ:
1対1、1対多、多対多、多対1
最小カーディナリティー:
オプションから必須、オプションからオプション、必須からオプション、必須から必須
例を使って作業しましょう-
Students
かかりますClass
。ここでは、とは両方ともStudents
エンティティClass
です。学校では、特定の学期に学生が登録されている場合とされていない場合があります。夏学期にコースを提供している学校を考えてみてください。しかし、参加することに興味のある学生はいません。したがって、学生のカーディナリティは(0、N)になる可能性があります。ただし、aClass
が進行中の場合は、少なくとも1人の学生を登録する必要があります。したがって、そのカーディナリティは(1、N)である必要があります。したがって、関係に参加しているエンティティが部分的であるか全体的であるかを確認する必要があります。これにより、関係のカーディナリティが決定されます。
それが役に立てば幸い。
あなたの質問に対して、「データベース設計におけるオプションの使用は何ですか?」:次のようなシナリオで非常に役立ちます。
1対1の関係で2つのテーブルを設計する場合、外部キーをどこに(どのテーブルに)置くかを決めるのに混乱します。一方のテーブルに1、もう一方のテーブルに0のオプションがある場合、それを決定するのは非常に簡単です。外部キーは前者に存在する必要があります。他にも多くの用途があります。
それが役に立てば幸い。