Sql表设计-从唯一键与业务键中选择主键

标签 sql sql-server database-design

我需要设计一个表,但对选择主键字段有点困惑。例如,我正在创建一个包含以下列的表学生

  • ID - 唯一键并自动递增 1。
  • 注册号码 - 表格中的号码是唯一的
  • 姓名
  • 注册日期

现在我的问题是:从上表中我们可以看到ID和RegistrationNumber都是唯一的,RegistrationNumber服务于商业目的,而ID用于与其他人引用该表。因此,在这两列中,我可以将哪一列作为主键。

从业务上下文来看,注册号应该是表的主键,但由于我在其他表事件中引用了 ID,所以我可以选择 ID 作为 PK..

请建议我哪一个应该合适。

提前致谢。

最佳答案

您应该为您的 PK 使用代理键。我建议您使用 ID 列作为 PK。

如果 RegistrationNumber 列必须是唯一的,您始终可以对其施加唯一约束

在此处阅读代理键:Surrogate vs. natural/business keys

也在这里:https://en.wikipedia.org/wiki/Surrogate_key

关于Sql表设计-从唯一键与业务键中选择主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24067470/

相关文章:

sql - mysql查询。 Join 和 SubQuery 有什么区别?

php - 使用两个不同表中的 ID 和名称进行搜索

sql - 用于连接 sql 表的 CASE

database-design - 如何在基于标签的组织中定义结构?

sql - 表设计+SQL问题

mysql - SQL - where 子句中的未知列

sql - 将 varchar 值 'Id' 转换为数据类型 int 时转换失败

sql - T-SQL 子查询最大(日期)和连接

sql - 创建 T-SQL 用户组

database - Django - 设计模型关系 - 管理界面和内联