Sql server 主键是否通过é;?
主键提供什么独特的功能 虽然我在标题中直言不讳地提到了这个问题,但我的问题是严肃的。在任何火焰开始之前,我并不是说构建一个没有约束或引用完整性的数据库。然而,据我所知,SQL Server可以去掉Sql server 主键是否通过é;?,sql-server,database-design,primary-key,Sql Server,Database Design,Primary Key,主键提供什么独特的功能 虽然我在标题中直言不讳地提到了这个问题,但我的问题是严肃的。在任何火焰开始之前,我并不是说构建一个没有约束或引用完整性的数据库。然而,据我所知,SQL Server可以去掉主键关键字 唯一索引包括唯一性 基于列的非空性包括PKs的非空性要求 PK不必聚集在一起,所以不是这样 外键可以而且通常是通过唯一索引而不是PK实现的 甚至MSDN也声明创建一个唯一索引来强制PK的唯一性 我确实同意,从逻辑上讲,主键对数据模型有一点意图,但这是真的吗?[讽刺]哦,我们的确在设计桌子
主键
关键字
- 唯一索引包括唯一性
- 基于列的非空性包括PKs的非空性要求
- PK不必聚集在一起,所以不是这样
- 外键可以而且通常是通过唯一索引而不是PK实现的
- 甚至MSDN也声明创建一个唯一索引来强制PK的唯一性
编辑 从评论来看,很明显我问这个问题没有我想的那么清楚。我同意主键从逻辑角度来看很重要 我不是问:
- 我应该为我的PK选择int还是varchar
- PK是否必须群集,或者我如何确定应该群集的内容
- 如何唯一标识行
我的意图是问“PK提供了哪些不能合理地使用其他功能实现的功能?”我不是建议在这里发疯——比如使用触发器强制唯一性而不是唯一约束/索引。合理在这里是一个关键词——使用唯一的索引/约束似乎与定义PK非常相似。主键是一个逻辑概念。它是定义实体标识的键:在小部件表中,每个小部件通过其主键值进行区分。PK不是聚集索引(即物理存储属性),也不是唯一约束(即不同的逻辑属性)。虽然主键和聚集键经常重叠,但这只是巧合(PK是一个方便的聚集键),甚至只是疏忽(PK被用作聚集键,即使给定工作负载存在更好的候选者) 更改群集密钥是一种可以随时在现场由ops进行的更改,以更好地满足此存储需求或性能工作负载需求。应用程序不应该注意到变化(在理想世界中…)。更改PK是一种设计更改,需要在对象标识符更改时修改应用程序的数据模型,并且通常会通过数据模式/应用程序代码进行渗透 顺便说一句,这个话题已经在这里被问到并回答得很恶心了:
*C.J.日期:选择主键并非完全任意。例如,易变主键是个坏主意。完全不同的观点: SQL是一种由ISO标准定义的语言。该标准具有“强制性”特征和“可选一致性”特征 如果您使用某种数据操作语言构建DBMS,则只有在以下情况下,您才有权调用您的语言“SQL”: (a) 您已经实现了标准规定的所有语法(“强制”功能),并且 (b) 所有的语言特性