This answer解释了@ManyToOne
和@OneToOne
之间的功能差异。不过,我不明白 - 你什么时候选择使用@OneToOne
?
如果我理解正确,这意味着表X中的每个对象都映射到(最多)表Y中的一个对象,并且没有两个X被映射到相同的Y.
适当的用例是否适用于可选属性?例如。汽车< - > Trunk,有些汽车有行李箱,如果有的话,他们拥有它(谈论没有汽车的行李箱是没有意义的)?
答案 0 :(得分:6)
继承映射是数据库中一对一关系的理想选择。
假设您有一个“人员”表来存储在公司工作的人员,但一个人可以是雇员或承包商。在这种情况下,您将所有公共属性存储在Person表中。例如:
然后您定义与“员工”和“承包商”表的一对一关系:
员工:
承包商:
答案 1 :(得分:3)
1-1关系的另一个原因是出于性能原因减少表记录的大小(较宽的表往往更快),并且当所需的字段数量太大以至于记录大小将大于数据库可以支持的实际记录大小。
有时在信息中存在自然分裂,其中仅在经常访问主表中的信息的少数情况下需要第二表中的信息。在这种情况下,拆分它也是有意义的。当事物属于两类不同的信息但需要在它们之间强制执行一对一的关系时,这就是这种情况。例如,汽车可能只有一个发动机,但您可能希望在不同的地方存储有关发动机的技术细节,而不是关于车主和许可等的信息,因为您将在应用程序中以不同方式使用该信息。
另一个地方是你现在有一对一的关系,但计划将来做一对一。也许在房地产应用程序中,您首先只显示房屋的一张图片,但您打算在下一个版本中展开它。