首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >删除primary key约束后,列将发生什么情况?

删除primary key约束后,列将发生什么情况?
EN

Stack Overflow用户
提问于 2019-06-14 11:24:26
回答 2查看 85关注 0票数 0

我说的是主键的规范化。因此,假设我的主键列是nvarchar类型,这违反了规范化规则。从所需列中移除主键约束和标识规范之后。我需要创建一个新列,它将成为该表的新主键。

我的问题是,前一个主键应该发生什么?我得到了一个听起来像这样的答案:“这个列应该成为一个语义键”,但我不能理解这个答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-14 11:43:01

在设计数据库模式时使用代理主键并不少见。其思想是为每条记录提供一个唯一且永久的标识符,以便应用程序和外键可以轻松引用它。这个密钥没有任何意义。知道代理键不会给您提供有关记录内容的信息。您的应用程序的用户永远不会看到此值。

另一方面,您的记录可能具有语义主键。这是一个唯一的值,用于标识对用户有意义的数据。

例如,假设您有一个雇员表。雇主为每个员工分配一个唯一的员工ID号码。假设您将该值存储为一个字符串。对于用户来说,该值充当引用该员工的唯一标识符。同时,您的表可能有一个数值列,用作该记录的唯一标识符。

代码语言:javascript
运行
AI代码解释
复制
create table Employee ( EmployeeRecordID int identity(1,1) primary key,
EmployerAssignedID nvarchar(12),
EmployeeName nvarchar(60),
Salary money )

insert into Employee ( EmployerAssignedID, EmployeeName, Salary ) values
( '#ABC100', 'Fred', 25000.12 ),
( '#AZZ314', 'Mary', 37700.00 ),
( '#MAA719', 'Fran', 34444.04 ),
( '#MZA977', 'Mary', 36000.00 ) 

添加每条记录时,SQL Server将为每条记录生成一个从1开始的唯一EmployeeRecordID。这是代理键。在数据库和应用程序中,您可以使用此值来引用记录。

但是,当您的应用程序与用户通信时,您将使用EmployerAssignedID。这是语义主键。对于您的用户来说,使用此值来搜索特定的员工是有意义的。

票数 0
EN

Stack Overflow用户

发布于 2019-06-14 12:02:48

主键只不过是唯一的索引,不能将NULL值作为键。与任何索引一样,它可以是集群的,也可以是非集群的。

删除聚集索引会使表变成一个结构和行为发生变化的堆。删除非聚集索引只是释放其空间,并且不会影响该表以及该表上的其他索引。

因此,在删除之后,您只有一个具有唯一值的列,并且您能够将它们视为语义键,直到插入一些重复的值为止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56597198

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文