MySQL - 也使用外键作为主键

时间:2012-01-20 23:09:38

标签: mysql foreign-keys primary-key foreign-key-relationship primary-key-design

我的表1包含主键user_id,表2包含user_id是外键。

表2中每个user_id只能存在1条记录,没有它就不能存在记录。

问题:表2中的user_id可以同时是外键还是主键,如果是,那么它是一个好主意,有什么利弊?

1 个答案:

答案 0 :(得分:32)

是的,您可以这样做(从数据库设计的角度来看,您应该这样做。)

但是,如果user_id是表2中的主键,请考虑它意味着什么。您实际上是说表2中的每一行都对应一个用户,但是您已经有一个表,其中每一行对应于用户:表1.这引发了一个问题“为什么不将表2的所有数据放入表1中的可空列?”。毕竟,拥有两个表意味着您必须进行两次查询才能获得此数据而不是一次。

现在有些情况下这种做法可能是一个好主意:

  • 如果你有很多用户但只有表2中的几行,那么表2中的查询可能只会很少执行;同时,您获得了表1中的存储空间和修改速度
  • 将来可能会更改表2的主键,而外键仍然存在;如果将所有数据放在表1中,则此修改很可能会破坏您的数据库模型

这可能是一个好主意,但这取决于您的申请的详细信息。