sql - 关系数据库设计问题 - 代理键还是自然键?

标签 sql database-design data-modeling surrogate-key natural-key

哪一种是最佳实践?为什么

a) 类型表、代理/人工 key

外键是从user.typetype.id: alt text

b) 类型表,自然键

外键是从user.typetype.typeName: alt text

最佳答案

我相信在实践中,使用 natural key很少是最好的选择。我可能会选择 surrogate key方法如第一个示例所示。

以下是自然键方法的主要缺点:

  • 您的类型名称可能不正确,或者您可能只是想重命名该类型。要编辑它,您必须更新所有将其用作外键的表。

  • int 字段上的索引比 varchar 字段上的索引紧凑得多。

  • 在某些情况下,可能很难获得 unique自然键,这是必要的,因为它将用作主键。这可能不适用于您的情况。

关于sql - 关系数据库设计问题 - 代理键还是自然键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3747730/

相关文章:

适用于多个用户的 MySQL 数据库结构,每个用户有 100 到 1000 条唯一行

mysql - 如何设计这个简单的数据库?

mysql - 从 mysql 的数据库表中以层次结构方式删除项目的最佳方法?

SQL Server INSERT 性能(SQL、Azure SQL 数据库)

java - 从头开始设计 Java 应用程序时总是 'Entity first' 方法?

java - 如何在业务流程过程中捕获数据库中实体的状态?

Excel PowerPivot 平均计算

php - 每个关键字 10 条记录 SQL

c# - 删除字符串变量中存储的值的最后两个字符

database - 我如何为预算应用程序建模预算数据?