主键和代理键有什么区别?

新手上路,请多包涵

我用谷歌搜索了很多,但我没有通过示例找到确切的直接答案。

任何这方面的例子都会更有帮助。

原文由 Dom 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

主键是您选择的表中的唯一键,它最能唯一地标识表中的一条记录。所有表都应该有一个主键,因为如果您需要更新或删除一条记录,您需要知道如何唯一标识它。

代理密钥是人工生成的密钥。当您的记录基本上没有自然键(例如 Person 表时,它们很有用,因为同一日期出生的两个人可能有相同的名字,或者日志中的记录,因为它是两个事件可能发生,因此它们带有相同的时间戳)。大多数情况下,您会看到这些实现为自动递增字段中的整数,或为每条记录自动生成的 GUID。身份证号码几乎总是代理键。

然而,与主键不同,并非所有表都需要代理键。如果您有一张列出美国各州的表格,那么您实际上并不需要它们的 ID 号。您可以使用州缩写作为主键代码。

代理键的主要优点是它们很容易保证是唯一的。主要缺点是它们没有任何意义。例如,“28”是威斯康星州没有任何意义,但是当您在地址表的州列中看到“WI”时,您就知道您在说什么州,而无需查找您所在州的哪个州桌子。

原文由 Bacon Bits 发布,翻译遵循 CC BY-SA 3.0 许可协议

代理键通常是一个数值。在 SQL Server 中,Microsoft 允许您定义具有标识属性的列,以帮助生成代理键值。

PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一值。主键列不能包含 NULL 值。大多数表都应该有一个主键,每个表只能有一个主键。

http://www.databasejournal.com/features/mssql/article.php/3922066/SQL-Server-Natural-Key-Verses-Surrogate-Key.htm

原文由 Bishoy Frank 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进