2

employeescompaniesおよびaddressesテーブルを含む MySQL データベースがあります。セットアップは次のように機能します。従業員と会社にはそれぞれ id があります。これらは 2 つの異なるテーブルにあるため、従業員は id = 1 を持つことができ、会社は id = 1 を持つことができます。どちらも複数のアドレスを持つことができます。

現在、アドレス テーブルには、会社または従業員のいずれかにリンクする 2 つの列があります。

element_id  
element_type_id

element_type_id は 1 = person または 2 = company のいずれかです

全体はもう少し複雑で、さらに多くのテーブルがありますが、それで概念が説明されます。問題は、Entity Framework を使い始めたいということであり、そのために外部キーとの関係を定義する必要があります。
しかし、それは私たちが現在持っているセットアップではほとんど不可能に思えますね? 住所表は個人と会社を合わせないといけないので何とか…。

何か案は?

4

2 に答える 2

0

この概念は、ポリモーフィック アソシエーションと呼ばれます。参照的に健全にしたい同様のデータ構造を持っていたので、私はかつてそれについて質問しました。この質問に関しては、あなたAddressは Comment テーブルや Person などに対応していEmployeeますCompany

答えは素晴らしかった。スキーマを変更できる場合、私は間違いなくそれを選択し、そのアプローチを使用します。

スキーマを変更できない場合は、いつでもAddressEF モデルでクラスをサブタイプ化element_type_idし、識別子列として使用できます。サブタイプEmployeeAddressCompanyAddressを作成します。Employee前者とCompany 後者を参照します。しかし、「全体がもう少し複雑です」ので、これがあなたの状況で実現可能かどうかはわかりません.

于 2012-08-29T12:56:33.833 に答える
0

この概念はリレーショナル データベースには当てはまらないことは既に述べました。それは間違っていません.MySQLと他のすべてはそれをサポートしていません. また、これは正規化されたレイアウトではないため、データベース エンジニアから悪い習慣と見なされる可能性があります。

それぞれが会社と住所、または従業員と住所の関係を保持する 2 つの追加テーブル (employee_addresses と company_addresses) を作成して、関係から住所を分離することを検討する必要があります。このようにして、会社と多くの従業員に使用される 1 つの住所を取得することができます。これは良いことです (正規化された構造)。

于 2012-08-29T08:49:17.497 に答える