我有两个类,User
和Status
,而一个用户会有多个状态,这自然是Many-to-One
> 关系并且可以轻松映射到数据库表。
但是,该要求还需要 User 保持其“当前”状态,即在 User
表中,它需要有一个指向 Status
的外键 table 。这样做的结果是两个表之间有两个相反方向的外键。
一个明显的问题是,一旦将记录插入两个表中,我就无法删除它们,因为从一个表中删除将违反另一个表的外键。
针对这种情况的最佳设计是什么?
最佳答案
- 在状态表中,添加一列来确定此状态记录是否为“当前”。
** 对于性能问题,您只能将“当前”状态记录设置为“1”值,其余设置为空值
- 您现在不必使用 2 个外键,只需使用一个 - 从 Status 到 User。
- 如果您使用 hibernate 作为帖子的标签:),您可以在数据库中创建一个 View ,该 View 将仅选择“当前”状态记录,并且具有与状态表相同的结构。
- 使用一对一关系将 View 连接到用户实体,
希望对你有帮助!
关于数据库设计对两个表之间双向外键的考虑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965626/