【问题标题】:Database design consideration on foreign-key both way between two tables两个表之间双向外键的数据库设计考虑
【发布时间】:2023-03-19 11:56:01
【问题描述】:

我有两个类,UserStatus,而一个用户会有多个状态,这自然是Many-to-One 关系,可以很容易地映射到 DB Tables。

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

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

对于这种情况最好的设计是什么?

【问题讨论】:

    标签: database hibernate jpa


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

    希望对你有帮助!

    【讨论】:

    • 这是我目前使用的方法。了解hibernate中视图的使用很有趣,谢谢。
    • @Wudong 数据库视图用法和表一样,使用@Table注解
    【解决方案2】:

    您是否必须将状态保存在单独的表格中?它不能仅由 java 枚举表示,并且 User 将具有 status 属性。像这样的:

    public enum UserStatus {
            X, Y, Z;
    }
    
    public class User {
        private UserStatus status;
            ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多