数据库设计对两个表之间双向外键的考虑

标签 database hibernate jpa

我有两个类,UserStatus,而一个用户会有多个状态,这自然是Many-to-One > 关系并且可以轻松映射到数据库表。

但是,该要求还需要 User 保持其“当前”状态,即在 User 表中,它需要有一个指向 Status 的外键 table 。这样做的结果是两个表之间有两个相反方向的外键。

一个明显的问题是,一旦将记录插入两个表中,我就无法删除它们,因为从一个表中删除将违反另一个表的外键。

针对这种情况的最佳设计是什么?

最佳答案

  1. 在状态表中,添加一列来确定此状态记录是否为“当前”。 ** 对于性能问题,您只能将“当前”状态记录设置为“1”值,其余设置为空值
    1. 您现在不必使用 2 个外键,只需使用一个 - 从 Status 到 User。
    2. 如果您使用 hibernate 作为帖子的标签:),您可以在数据库中创建一个 View ,该 View 将仅选择“当前”状态记录,并且具有与状态表相同的结构。
    3. 使用一对一关系将 View 连接到用户实体,

希望对你有帮助!

关于数据库设计对两个表之间双向外键的考虑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965626/

相关文章:

java - 如何开发在部署时请求数据库凭据的 Java Web 服务?

java - 寻找 HQL 构建器(Hibernate 查询语言)

Spring Data-如何告诉spring要检索哪些实体

java - Eclipselink:批量读取创建大量查询

spring - 事务未开始在 Tomcat 中使用 Spring 和 JPA

java - Android SQLite 查询顺序问题

php - 无法使用php连接到mysql

java - 限制 Hibernate Criteria 查询中关联的类

hibernate - 获取按列排序的惰性列表

c# - 在数据库中插入 datagridview 的值