回答
主键可以用作另一个表中的外键,标识列不能。在没有看到您要存储的数据类型的情况下,我会建议使用标识列,并将其设置为主键。
在SQL Server中,任何表都可以引用**主键**或任何**唯一索引**。所以如果你在'IDENTITY'列上有一个唯一的索引 - 它肯定可以**从其他表中引用! –
外键只需要父表中的唯一键。 IDENTITY与UNIQUE声明无关 – gbn
@Brain - 但只有主键具有使用varchar的好处,所以为什么只需要使用更多列的负担。 –
您是否试图将标识列与唯一标识符列用作主键?
Uniqueidentifier(Guids)具有在整个环境中唯一的优势,使得在给定表格上下文之外唯一标识一条记录更为容易。他们还提供了一个您可以在您的应用程序中公开的密钥,这些密码不易迭代。
标识列使用较少的存储空间,因此速度更快,效率更高。
他们的使用没有正确的答案。这真的取决于上下文。
阅读Kimberly Tripp出色的[GUIDs PRIMARY KEYs和/或clustering key](http://www.sqlskills.com/blogs/kimberly/guids-as-primary-keys-andor-the-clustering-key/)博客在使用'GUID'作为你的集群密钥之前,发布**之前......至少在SQL Server中,对于你的集群密钥,'GUID'是一个非常糟糕的选择。 –
- 1. MySQL:强制一个独特的列而不使用唯一的密钥
- 2. 尝试使用复合唯一索引而不是复合唯一标识
- 3. 使用唯一的成员标识符标识对象是个好主意吗?
- 4. 如何唯一标识C#中的USB密钥?
- 5. 批量插入到SQL表中,并使用唯一标识列不是标识
- 6. 使用Java标准密钥存储库是不好的做法
- 7. 基于日期生成4位数字唯一标识密钥
- 8. std :: set和boost :: shared_ptr唯一密钥标识问题
- 9. 如何使用密钥绑定而不是密钥监听器
- 10. 使用未编码密钥与真实密钥,好处?
- 11. MySQL在重复密钥更新中使用唯一密钥中的空值列
- 12. '唯一'的唯一密钥或索引
- 13. 导轨使用关系唯一密钥
- 14. 使用C#创建MongoDB唯一密钥
- 15. VB.Net使用唯一密钥更新MySQL
- 16. 使用SqlCommand.ExecuteNonQuery而不是...的好处
- 17. 使用systemu而不是open3的好处?
- 18. 是否有用于广告标识符使用的info.plist密钥
- 19. 生成唯一的密钥
- 20. JavaScript的唯一密钥值
- 21. 使用唯一标识符作为主键的好处?在sql服务器
- 22. 密钥不唯一,更新非密钥属性上的行时?
- 23. Android:Java:使用密钥而不是密码解密AES
- 24. 使用多列无需唯一密钥的Oracle更新
- 25. 如何使JsonConverter写密钥/值而不是密钥/数组
- 26. 生成一个唯一的密钥来识别系统
- 27. 通过唯一标识连接主机,而不是IP?
- 28. 为什么git使用GPG密钥而不是使用SSH密钥签名?
- 29. 如何唯一标识iOS设备而不是使用UUID和UDID
- 30. RadSpreadsheet - 给列一个唯一的标识
你知道这样更好,但你不知道为什么? –
@MrLister是的...我想向我的客户解释这个 –
他们不是很相似。一个标识列本质上是独一无二的,但它并不强制任何其他列的唯一性,所以如果你想要列是唯一的,你应该使其独特;如果添加标识列,则可以反复在其他列中插入相同的记录,并且在复制剩余信息的同时,它会继续为您提供行的唯一性。可以打开和关闭标识列增量,您可以更改当前标识值以跳过标识。你可以做各种各样的东西。 –