具有单列和增量 id 的 SQL 表

标签 sql database-normalization

简单的数据库设计问题,老实说,我不能完全解决。

在很多情况下,我有一个类型表,其中包含一个 ID 和类型的名称。 Ala. 语言代码表将有 2 列

表:language

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

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



哪个更好?

派发 language_id作为外键,然后进行连接以获得 language_code .

或者

省略 language_id总而言之,我们有

表:language
language_code (et, en-us, de)

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

意见?

最佳答案

答案是,这取决于。

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

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

  • 性能影响通常很小。你会在语言 ID 上有一个主键索引,它会非常快。

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

    我会投票支持单独的引用表以及随之而来的所有好处。在某些极端情况下,出于特定原因,人们可能会考虑另一种结构。

    关于具有单列和增量 id 的 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29052146/

    相关文章:

    database-design - 您如何确定标准化数据库的距离?

    sql - POSTGRES SQL QUERY 错误语法无效

    sql - 存储查找表 ID 或纯数据之间的决定

    mysql - 不必要的标准化

    database - DBMS 中的第三范式

    mysql - 在规范化过程中创建非规范化表的现有做法/准则?

    mysql - 获取日期之间的总平均值

    mysql - JOIN 与右侧同一个表的多个引用

    sql - 使用聚集索引更好还是使用包含列的非聚集索引更好?

    c# - SQL 中的数据分组