一个基础问题
来源:互联网 发布:mysql 字段替换字符串 编辑:程序博客网 时间:2024/06/06 08:44
用sql server设计了一个表,其中有一个人的身份证的信息,我想以身份证号为主键,可以吗?
可是网上看到的资料说,主键不应该人为给定的,应该由计算机自动生成,貌似就是自增的意思。
可以用身份证号码作为主键,反正不会出现冲突就好了。
网上的说法,或许只是建议使用自增列作为主键。
遇到一个结论,思考一下为什么。各种方案,只要是可行的,便没有对错,只有优劣。自己理解了,才能根据自己的情况灵活选择。
主键:逻辑概念。一个主键唯一地决定表中的一条记录。一个表只能有一个主键。
聚集索引:物理概念。聚集索引决定表中数据的物理存储结构,同时也是最高效的查询途径。一个表只能有一个聚集索引。
通常主键会默认为聚集索引。但这不是必须的。主键和聚集索引是两回事,一定分清楚。
选择自增标识列或GUID为主键
优点:1. 可由计算机自动生成,方便。2. 定长字段,而且通常为整数,占用空间小。
缺点:缺乏直观的意义,只能作为系统内部的标识。
示例:ERP系统的订单号、BBS系统的用户号和帖子号。
选择预定义编码为主键
优点:编码具有直观意义,方便使用。
缺点:1. 编码需要专门生成和维护。2. 有意义编码通常是字符串类型,占用空间较大。
示例:公安部国民信息系统的身份证号、邮政系统的邮编号、电信系统的电话号码。
选择思路
1. 如果一个表的数据量和数据变化不大,使用频率高,且不需要太多索引(聚集索引键影响非聚集索引的空间大小),则考虑选择预定义编码。
如员工工号、部门编号,使用E0001、D1-2的编码就比使用12345、67890这样的标识列更直观、易用。
如日历表显然是以日期为主键,号段地区表显然是以号段为主键,这种情况下添加一下自增标识列完全吃力不讨好,既浪费空间又降低性能。
2. 如果一个表的数据是在业务运行中不断生成,数据量和数据变化比较大,或者需要建多个索引,则考虑使用内部定义主键(标识列)。
如ERP系统的订单号,专门编制有意义的编码既费力又没有意义。
如图书馆系统或网上书店的图书表,往往采用内部定义主键(整数标识列),使用ISBN固然可以,但由于图书需要多种查询方式,需要在书名、作者、出版社+出版年、ISBN等多个字段上建索引,如果主键太大会浪费空间影响性能。
选择主键(以及聚集索引),不光要从技术上考虑,也要从系统业务角度考虑。
从逻辑上说,一个表是一种事物(事或物的统称)的集合,一个主键即是一个该类事物的唯一标识。
如果要表示一个国家的人,以身份证号(社会保险号等)作为主键是必然。
如果要表示世界上的人,则需要以国家码+该国国民身份编号作为主键。
如果只是表示一个企业的员工,用身份证号则不太有必要,不如制订一个企业内部员工编号。但设计编码要考虑业务变化和未来兼容性,比如当两个企业合并以后,员工编号要怎么处理。
全国身份证号是有重复的,不能作为主键,不用怀疑身份证号没有重复的啊,可以用来做主键!
身份证号有重复?除非是造假吧。
支持做主键,不过要看你的实际需求,表的结构。
LZ说说的自增的是设置了标识列 作为标识列后就能自动增长 比如标识种子是1 标志增量也是1那么你插入的数据ID自动生成就一次为1 2 3 ...
身份证号码可以作为主键 因为身份证号是唯一的
主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。
来源:足球直播
- 一个基础问题
- 数据库的一个基础问题
- 一个基础有关问题,多谢
- Java基础----一个死锁问题
- 一个帧内预测的基础问题
- 字节对齐问题----一个很古老的基础问题
- java基础问题----java中有几种方法可以实现一个线
- 一个基础但是隐晦的c++语法问题
- 面试问的比较多的一个基础问题
- 其实就反映了一个专业基础的问题
- 基础模型搭建过程中一个很严重的问题
- Java基础----一个有问题的多线程程序
- hibernate4基础梳理(一)---一个问题忙一天
- Java基础 Arrays.atList需要注意的一个问题
- Java基础 String类的一个小问题
- 一个基础的多线程问题,记录学习多线程
- 面试问题(一个基础平台应该包含哪些模块)
- 面试问题(做一个基础平台需要哪些人才)
- 我想学习SQL语言,但是个初学者
- 在Sharepoint里面使用ASP.NET AJAX Control Toolkit
- C++图像处理 -- 平面几何变换类
- C++编写安全OCX,IE不弹出安全提示
- oracle的Oradim工具的用法
- 一个基础问题
- 数字黑洞
- test
- eclipse中class file editor Source not found的解决方法
- Google Protocol Buffer
- 类模板
- jboss 下 jaas 的使用
- jwsmtp, a simply C++ SMTP library
- test