建模“可选”外键

时间:2010-06-07 14:16:35

标签: database-design

我有2个实体

  • 用户
  • UserCreditCard

用户可以使用信用卡。你会如何建立关系模型以及为什么?

选项1 :用户拥有可能为null的UserCreditCard外键

选项2 :UserCreditCard的用户外键不能为空

修改

我的错误没有说明该用户将拥有0或1张信用卡,不再有

3 个答案:

答案 0 :(得分:5)

我会避免在这里建立双向关系。简单地使用引用您的CreditCard表的UserID列对User表进行建模似乎更有意义。向CreditCardID添加User引用只会增加不必要的复杂程度和错误机会。

我建议将参考 User 移至 CreditCard,并从 {{1>引用 } CreditCard不可空和索引。这应该可以为您提供所需的一切。

答案 1 :(得分:2)

我认为你已经说过你应该如何以及为什么要对它进行建模:

  

用户可以使用信用卡

使用选项1.您可以通过检查外键来判断谁有卡和谁没有,并且您的映射仍然有效,因为如果信用卡外键为空,则信用卡赢了t匹配任何东西,所以它只是为空。但是,当您删除删除用户实体中的映射的信用卡时,您必须小心。

答案 2 :(得分:2)

选择第二选项。它的复杂性较低,它还可以模拟用户拥有多张信用卡或更改信用卡的情况。