一个人的地址可能如下所示:
country: USA
state: Some state
city: N.Y.
Street: some stree name with buildings
Building: number of the building on the street
或者,如果建筑物由多个公寓/房间组成,则应使用另一个实体:
公寓/房间:建筑物中的公寓数量
示例中的每个下一级都将父级作为不能为空的外键:
县 - 是状态的容器
state - 是城市的容器等等。
建筑物 - 可能是也可能不是房间/公寓的容器。
结果,我为每个级别提供了下表:
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 是指建筑物表,在第二种情况下是指公寓表。
第二个选项是拥有一个包含以下字段列表的表:
SomeEntity
id person_id country_id state_id city_id street_id building_id apartment_id
在这种情况下,如果建筑物没有房间,则 apartment_id 字段为空。如果我需要例如获取居住在城市/或街道上的人的列表,这也很有用,因为我不需要加入所有与地址相关的表,只需参考 SomeEntity 表。你觉得这张桌子怎么样?在这种情况下如何映射 Person 对象?SomeEntity - 只是一个表,而不是对象。我的服务实际上不应该对内部表结构一无所知。这个问题我不清楚。也许您可以提供更好的解决方案。
请帮忙。