一个基础问题

forBetter3 2010-08-13 10:28:32
用sql server设计了一个表,其中有一个人的身份证的信息,我想以身份证号为主键,可以吗?
...全文
560 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
EverLast2 2011-02-09
  • 打赏
  • 举报
回复
标识和主键?这是基础知识,楼主先学学数据库系统再做系统吧,我觉得理论基础要先有所涉猎,不然动手起来一大堆低级错误
觅不凡 2010-12-18
  • 打赏
  • 举报
回复
由于以前是手工统计的身份证号,所以可能有重复的出现,最好不用它做主键
cebio 2010-12-17
  • 打赏
  • 举报
回复
不光有重号问题,有时有人身份证号没报上来,但是数据是从其他地方报上来的,只好用一个特殊值代替,等以后再校正,实际情况很多的。
daishaodong 2010-10-07
  • 打赏
  • 举报
回复
看来大家经验不足,我就发现有身份证重复的,尤其在一些基层单位,或涉及农村的地方。。。
siegebaoniu 2010-10-07
  • 打赏
  • 举报
回复
看lz需要了。身份证号是独一无二的,具备做主键的条件。
yuerjiajia 2010-10-07
  • 打赏
  • 举报
回复
二代身份证重复现象的太多了
hello926 2010-10-07
  • 打赏
  • 举报
回复
我在新闻上有看到,在办理二代身份证时发现在重复现像。
heroisme12 2010-10-06
  • 打赏
  • 举报
回复


身份证号没有重复的啊,可以用来做主键!
liyingjie5360 2010-08-31
  • 打赏
  • 举报
回复
肯定可以啊。。。身份证是独一无二的。
xulehome 2010-08-31
  • 打赏
  • 举报
回复
可以用来当主键的,身份证那里有重复的哦 那不大乱啦
Black_Animal 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 forbetter3 的回复:]
引用 1 楼 lxq19851204 的回复:

当然可以了。。

可是网上看到的资料说,主键不应该人为给定的,应该由计算机自动生成,貌似就是自增的意思。
[/Quote]
LZ说说的自增的是设置了标识列 作为标识列后就能自动增长 比如标识种子是1 标志增量也是1那么你插入的数据ID自动生成就一次为1 2 3 ...

身份证号码可以作为主键 因为身份证号是唯一的
主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。
望LZ采纳
sanny_txx 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 flyingzou 的回复:]
全国身份证号是有重复的,不能作为主键,不用怀疑
[/Quote]
身份证号有重复?除非是造假吧。

支持做主键,不过要看你的实际需求,表的结构。
sinpoal 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 flyingzou 的回复:]
全国身份证号是有重复的,不能作为主键,不用怀疑
[/Quote]

身份证号没有重复的啊,可以用来做主键!
flyingzou 2010-08-27
  • 打赏
  • 举报
回复
全国身份证号是有重复的,不能作为主键,不用怀疑
feilniu 2010-08-13
  • 打赏
  • 举报
回复
选择主键(以及聚集索引),不光要从技术上考虑,也要从系统业务角度考虑。

从逻辑上说,一个表是一种事物(事或物的统称)的集合,一个主键即是一个该类事物的唯一标识。

如果要表示一个国家的人,以身份证号(社会保险号等)作为主键是必然。
如果要表示世界上的人,则需要以国家码+该国国民身份编号作为主键。
如果只是表示一个企业的员工,用身份证号则不太有必要,不如制订一个企业内部员工编号。但设计编码要考虑业务变化和未来兼容性,比如当两个企业合并以后,员工编号要怎么处理。
feilniu 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 duanzhi1984 的回复:]

建议不要用其当主键 ,可以以工号或NEWID做主键 ,

但在身份证做一个唯一索引。。
[/Quote]

对LZ的情况来说,8楼的方案是比较合理的。
feilniu 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 forbetter3 的回复:]

引用 1 楼 lxq19851204 的回复:

当然可以了。。

可是网上看到的资料说,主键不应该人为给定的,应该由计算机自动生成,貌似就是自增的意思。
[/Quote]

LZ不要把书读死了。

遇到一个结论,思考一下为什么。各种方案,只要是可行的,便没有对错,只有优劣。自己理解了,才能根据自己的情况灵活选择。


主键:逻辑概念。一个主键唯一地决定表中的一条记录。一个表只能有一个主键。
聚集索引:物理概念。聚集索引决定表中数据的物理存储结构,同时也是最高效的查询途径。一个表只能有一个聚集索引。

通常主键会默认为聚集索引。但这不是必须的。主键和聚集索引是两回事,一定分清楚。

选择自增标识列或GUID为主键
优点:1. 可由计算机自动生成,方便。2. 定长字段,而且通常为整数,占用空间小。
缺点:缺乏直观的意义,只能作为系统内部的标识。
示例:ERP系统的订单号、BBS系统的用户号和帖子号。

选择预定义编码为主键
优点:编码具有直观意义,方便使用。
缺点:1. 编码需要专门生成和维护。2. 有意义编码通常是字符串类型,占用空间较大。
示例:公安部国民信息系统的身份证号、邮政系统的邮编号、电信系统的电话号码。

选择思路
1. 如果一个表的数据量和数据变化不大,使用频率高,且不需要太多索引(聚集索引键影响非聚集索引的空间大小),则考虑选择预定义编码。
如员工工号、部门编号,使用E0001、D1-2的编码就比使用12345、67890这样的标识列更直观、易用。
如日历表显然是以日期为主键,号段地区表显然是以号段为主键,这种情况下添加一下自增标识列完全吃力不讨好,既浪费空间又降低性能。

2. 如果一个表的数据是在业务运行中不断生成,数据量和数据变化比较大,或者需要建多个索引,则考虑使用内部定义主键(标识列)。
如ERP系统的订单号,专门编制有意义的编码既费力又没有意义。
如图书馆系统或网上书店的图书表,往往采用内部定义主键(整数标识列),使用ISBN固然可以,但由于图书需要多种查询方式,需要在书名、作者、出版社+出版年、ISBN等多个字段上建索引,如果主键太大会浪费空间影响性能。

可参看《SQL编程风格》第5章。
hao1hao2hao3 2010-08-13
  • 打赏
  • 举报
回复
一般没考虑过用身份证当主键。
cheng20100915 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 forbetter3 的回复:]
用sql server设计了一个表,其中有一个人的身份证的信息,我想以身份证号为主键,可以吗?
[/Quote]
可以
duanzhi1984 2010-08-13
  • 打赏
  • 举报
回复
建议不要用其当主键 ,可以以工号或NEWID做主键 ,

但在身份证做一个唯一索引。。
加载更多回复(7)

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧