個人の住所は次のようになります。
country: USA
state: Some state
city: N.Y.
Street: some stree name with buildings
Building: number of the building on the street
または、建物が複数のアパート/部屋で構成されている場合は、代わりに別のエンティティを使用する必要があります。
アパート/部屋: 建物内のアパートの番号
この例の次のすべてのレベルには、null にできない外部キーとして親レベルがあります。
郡 - 州のコンテナです
状態 - 都市などのコンテナです。
建物 - 部屋/アパートのコンテナである場合とそうでない場合があります。
その結果、各レベルに次の表があります。
country
id name
1 USA
state
id country_id name
2 1 N.Y.
city
id state_id name
3 2 New York
Street
id city_id name
4 3 Some Street Name
Building
id street_id number
5 4 28
apartment
id building_id number
8 5 36
私が遭遇した問題は、人をこのテーブル構造にマップする方法ですか? たとえば、大家族の家の場合、人はアパートに住んでいる場合と住んでいない場合があります。理想的には、いくつかのエンティティのコレクションが必要です:
ManyToMany
Collection<SomeEntity> addresses ...
whereSomeEntity
はアパートまたは建物を直接参照できます。
以下は私が現在検討しているオプションですが、私はそれらが好きではありません。
建物またはアパートのいずれかのタイプを持つ最初のオプションは、次のSomeEntity
ようになります。
SomeEntity
id person_id type address_id
10 11 building 21
11 13 apartment 24
最初のケースでは address_id は建物のテーブルを参照し、2 番目のケースではアパートのテーブルを参照します。
2 番目のオプションは、次のフィールド リストを持つテーブルを作成することです。
SomeEntity
id person_id country_id state_id city_id street_id building_id apartment_id
この場合、建物に部屋がない場合、apartment_id フィールドは null です。また、たとえば、市内/または路上に住んでいる人のリストを取得する必要がある場合にも役立ちます。住所関連のすべてのテーブルに参加する必要はなく、SomeEntity テーブルを参照するだけです。この表についてどう思いますか。この場合、Person オブジェクトをマップする方法は? SomeEntity - オブジェクトではなく単なるテーブルです。私のサービスは、実際には内部テーブル構造について何も知らないはずです。この問題は私には明確ではありません。おそらく、あなたはより良い解決策を提供することができます。
助けてください。