2

我有两个类,User并且Status,虽然一个用户会有多个状态,但这自然是Many-to-One关系,可以很容易地映射到数据库表。

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

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

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

4

2 回答 2

1

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

public enum UserStatus {
        X, Y, Z;
}

public class User {
    private UserStatus status;
        ...
}
于 2013-07-31T10:22:26.897 回答
1
  1. 在您的状态表中,添加一列来确定此状态记录是否为“当前”。 * *对于性能问题,您只能将“当前”状态记录设置为 '1' 值,其余的设置为空值
    1. 您现在不必使用 2 个外键,只需一个 - 从状态到用户。
    2. 如果您使用休眠作为帖子的标签:) 您可以在数据库中创建一个视图,该视图将仅选择“当前”状态记录,并且具有与状态表相同的结构。
    3. 使用一对一关系将视图连接到用户实体,

我希望它对你有帮助!

于 2013-07-31T10:39:39.270 回答