28

我有一个带有主键的表 1 和一个外键的user_id表 2 user_id

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

问题:user_id表 2 中可以同时是外键和主键,如果是,这是个好主意,有什么优点/缺点?

4

1 回答 1

33

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

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

现在有一些场景,这种做法可能是一个好主意:

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

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

于 2012-01-20T23:13:30.387 回答