如何确定在这种情况下将外键放在何处?

时间:2009-05-24 00:58:51

标签: database database-design foreign-keys entity-relationship foreign-key-relationship

如果我有两个表 - 登录和用户,如下:

Logins
 LoginIdNo
 UserIdNo
 HashedPassword 

Users
 UserIdNo
 LoginIdNo
 Username

每次登录“都有一个用户”,每个用户“都有登录”,但“属于”哪个?

它只是一个判断调用还是有一个明确的公式来确定外键应该驻留在哪里?

2 个答案:

答案 0 :(得分:2)

这是一对一的关系。在这些情况下,你放置外键的位置可能取决于选项。

您是否有任何特殊原因将其拆分为两个实体?我不是一对一映射的忠实粉丝,特别是在像JPA这样的ORM上,它们很难实现(如果你使用一个主键作为外键到另一个)。

在您的系统中,登录和用户之间的区别是什么?

如果每次用户登录时都会发生登录(即,它是用户活动的审计跟踪),那么您在用户和登录之间存在一对多关系,而登录应该使用UserID外键。

但是在这种情况下,用户名在一个表中,密码在另一个表中,并且两者之间存在一对一的关系,你必须问为什么它们是分开的。

答案 1 :(得分:1)

由于Login永远不会与多个用户相关联(反之亦然),因此您可以自行决定如何定义关系(以及因此放置外键的位置)。除非您还要添加其他属性(Firleds)或使用角色,否则简单地定义它可能更简单:

Users 
    UserIdNo 
    Username
    HashedPassword