SQL表具有单列和增量ID

时间:2015-03-14 17:45:22

标签: sql database-normalization

简单的数据库设计问题,老实说,我无法完全理解。

在很多情况下,我有一个类型表,它由一个ID和类型的名称组成。 Ala。语言代码表有2列

表:language

language_id (1,2,3)                 
language_code (et, en-us, de)

现在我总是将language_id作为其他表的外键发送,

BUT

哪个更好?

language_id作为外键分发,然后进行联接以获取language_code

OR

完全忽略language_id以便我们

表:language

language_code (et, en-us, de)

然后我们将把代码作为外键分发,当我们想知道用户的母语是什么时,就不需要连接。

评论

1 个答案:

答案 0 :(得分:8)

答案是,这取决于。

在大多数情况下,需要带有外键的引用表。原因如下:

  • 您可以包含一个检查该值是否有效的外键引用。
  • 您可以轻松添加其他值。
  • 您可以添加其他信息,例如添加的日期和全名“英语”而不是“en”。

性能影响通常很小。您将拥有语言ID的主键索引,而且速度非常快。

您的语言代码只有两个字符。如果您使用典型的4字节密钥作为引用,则每个记录中将使用另外两个字节。在某些情况下,直接包含语言代码可以节省空间和精力。但是,为了有所作为,您将谈论对非常大的数据库(比如数亿行)进行优化。

我会投票给一个单独的参考表以及随之而来的所有好处。在某些极端情况下,人们可能会出于特殊原因考虑替代结构。