SQL表具有单列和增量ID

Kar*_*ner 5 sql database-normalization

简单的数据库设计问题,我老实说不能完全指责.

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

表: language

language_id (1,2,3)                 
language_code (et, en-us, de)
Run Code Online (Sandbox Code Playgroud)

现在我总是把language_id作为其他表的外键,

哪个更好?

分发language_id为外键,然后联接得到language_code.

要么

language_id完全忽略我们所拥有的

表: language

language_code (et, en-us, de)
Run Code Online (Sandbox Code Playgroud)

然后,当我们想知道用户的母语是什么时,我们将只将代码作为外键分发,并且不需要任何连接.

意见?

Gor*_*off 8

答案是,这取决于.

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

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

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

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

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