新手问数据库主键的问题

有个疑问,就是主键的意思是不是=notnullunique,我觉得是。非空,唯一不就是主键的定义吗?... 有个疑问,就是主键的意思是不是=not null unique,我觉得是。非空,唯一不就是主键的定义吗? 展开
 我来答
isc039
推荐于2016-12-02 · TA获得超过7.8万个赞
知道小有建树答主
回答量:744
采纳率:0%
帮助的人:451万
展开全部

主键在选择时,不仅要考虑非空、唯一这两个条件,实际上这只是最小要求。

例如我在选择主键时,就还要考虑下面的因素

  1. 简单性:例如用户的指纹就不适合拿来当主键。因为它过于复杂了。主键通常都会在多个表中做为关联字段使用的,过于复杂的主键会增加表的存储负担。

  2. 稳定性:主键的更改会给数据库系统造成灾难,所以主键一定要稳定,不会因为任何因素发生更改。所以身份证号码其实不适合拿来当主键。

  3. 业务无关性:这和稳定性相关联,只要和具体业务相关,就很难避免编码规则的更改。

  4. 独立性:一个主键必须能标识一条记录,一条记录也必须只有一个主键(或主键集)。比如电话号码就不适合当主键,虽说它也具有非空性和唯一性,但不能避免某人有多个电话卡。

在实际使用时还有一些其它原则,比如外键必须与主表的主键关联,所以尽量避免复合主键等等。这些就是在项目中体会的了。


至于主键与唯一索引的区别,从上面也可以看出来:

唯一索引字段是与业务相关的,但主键会被选择业务无关的(例如MSSQL中的标识列)

主键只能有一个,唯一索引可以有多个。

主键必须是非空的,唯一索引允许出现一个空值,这有时很有用。比如可能在用户管理表中,只有超级管理员不需要登记联系邮箱。

主键通常用于与其它表进行关联,唯一索引通常不会拿来做这件事。

追问
非常感谢您的回答,让我对主键又有了更进一步的认识,但是如果not null unique加上简单性,稳定性,业务无关性和独立性是不是就成为了主键了呢?
追答
呵呵,有点纠结了哈。
表里的主键通常是必须的,所以你完全可以把主键当成唯一索引来用。
问题是,有些字段不想做为主键,又要求不能有重复值,为了应付这种情况,才引入了唯一索引这个概念。
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
秒懂百科
2021-03-24 · TA获得超过5.9万个赞
知道大有可为答主
回答量:25.3万
采纳率:88%
帮助的人:1.3亿
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式