MySQL - 也使用外键作为主键

Cod*_*oso 28 mysql foreign-keys primary-key foreign-key-relationship primary-key-design

我有一个带有主键的表1 user_iduser_id带有外键的表2 .

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

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

Jon*_*Jon 33

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

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

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

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

这可能是一个好主意,但这取决于您的应用程序的细节.

  • 这有意义的一种情况是,如果你使用[类表继承](http://stackoverflow.com/a/3579462/1709587),表2代表表1的子类.我想这是一个特例你的第一个要点. (5认同)
  • 谢谢.在我的情况下,这是你提到的第一个场景,加上表2有很多列的事实,还有表3,4等与表1类似的关系,所以把所有列放得太多了. (2认同)