私は、Chequing_Accountテーブル(予算、iban番号、およびアカウントの他の詳細を含む)を持っている状況をモデル化する必要があります。
言い換えれば、同じテーブルの2つの1対多の関係があります。
正規化の要件を尊重するこの問題の解決策を聞きたいです。私が聞いたほとんどのソリューションは次のとおりです。
1)PersonとCorporationの両方が属する共通エンティティを見つけ、これとChequing_Accountテーブルの間にリンクテーブルを作成します。これは私の場合は不可能であり、この特定のインスタンスではなく一般的な問題を解決したい場合でも可能です。
2)2つのエンティティをChequingアカウントに関連付ける2つのリンクテーブルPersonToChequingAccountとCorporationToChequingAccountを作成します。ただし、2人の人物が同じ当座預金口座を持つことは望ましくありません。また、自然人と法人が当座預金口座を共有することは望ましくありません。この画像をご覧ください
3)法人および自然人を指す2つの外部キーをChequing Accountに作成しますが、個人と会社が多数の当座預金口座を持つことができるように強制しますが、ChequingAccount行ごとに両方の関係が指すことはないことを手動で確認する必要がありますchechquingアカウントは法人または自然人のいずれかであるため、法人および自然人。この画像をご覧ください
この問題を解決する他の方法はありますか?
CHECK (CorporationID IS NOT NULL AND NaturalPersonID IS NULL OR CorporationID IS NULL AND NaturalPersonID IS NOT NULL)
。それははるかに「きれい」です。
ChecquingAccount
テーブルにOwnerTypeID=1
andのレコードがありOwnerID=123
、それがtype Corporation
であり123
、Corporation
テーブルのID であることを示しています。OwnerTypeIDはどのテーブルを示し、OwnerIDはそのテーブルのIDを示します。
Customers
テーブルと呼びます。
OwnerTypeID
にChecquingAccount
して、テーブル1=Corporation
と2=NaturalPerson
?そうすればOwnerID
、ChecquingAccount
テーブルに1つだけが必要になりますOwnerTypeID
。