主键怎么设置?(10分)

  • 主题发起人 主题发起人 sjm
  • 开始时间 开始时间
S

sjm

Unregistered / Unconfirmed
GUEST, unregistred user!
一个Sql Server 2000的表,命名为:部门表,只有一个字段:"部门名称",里面内容为:人事处,办公室,工会等信息。我在书上看到作者是又添加了一个Id自增型字段,并把Id字段设为主键。这两天上大富翁问了一些朋友,都说是为防止字段内容重复才设主键,否则可不设。我想问问大家:
1: 只要"部门名称"这个字段,并设为主键,不添加Id字段
2: 像书的作者那样添加了一个Id自增型字段,并把Id字段设为主键
3: 只要"部门名称"这个字段,但不设为主键
请问您会选择哪种,Why?
 
选第二种,因为这是我的习惯,再说多一个字段也不会多很多东西,而且这个自增型ID绝对保险。
 
那不对呀,万一在"部门名称"字段内输入重复数据咋办?
 
我选择第一种,
 
如果选择了第二种,则还需自己判断部门是否重复,选择第三种也是,而且没有主键的表数据量大时不好.
 
来自:sjm, 时间:2006-11-10 11:02:06, ID:3619729
那不对呀,万一在"部门名称"字段内输入重复数据咋办?

ID是自增的,你的部门就算是重复也有ID号不同可以来区分了啊。
 
如果第一种,当有相同的部门名称时怎么办?
 
有一个“部门代码”字段是必要的,可以把它设为主键。
是否自增就看具体需要了。
 
来自:fanybul, 时间:2006-11-10 11:07:42, ID:3619741
如果第一种,当有相同的部门名称时怎么办?
什么单位有相同的部门名称?
 
来自:李翔鹏, 时间:2006-11-10 11:44:57, ID:3619815
来自:fanybul, 时间:2006-11-10 11:07:42, ID:3619741
如果第一种,当有相同的部门名称时怎么办?
什么单位有相同的部门名称?

来自:sjm, 时间:2006-11-10 11:02:06, ID:3619729
那不对呀,万一在"部门名称"字段内输入重复数据咋办?
 
输入了重复数据会报错阿.有提示的.主键的作用就是防止重复阿
 
报错就不好了。
 
要是怕字段重复选1,这种情况是可能改动到这个表
要是有用到ID,或者查它的数量之类(对后面出现错误检查比较方便),用2
要是只是查询这个表,不做修改,删除等操作就选3
 
我选第二种,
 
如果仅仅是单独的一个表使用,哪种都无所谓,但如果是在一个项目中很多个表中的一个,一般来说用2
 
应该用一个部门代码的字段,最好是自己控制编号,在程序在需要用到部门的地方全用代码来替代。
 
我选第二种。

第一种的问题是,如果你某个部门要改名,其他关联表的外键层需要做叠性修改。

第二种的情况,通常单位部门是有套编码规则的,不会用自增变量做主键。但有些系统为了处理方便,喜欢统一使用数字型单一主键。例如订单项的主键一般是([定单号],[项编号])。但如果设个[订单项ID]做主键,其他表的外键就可以使用[订单ID],而不用([定单号],[项编号])两个字段的组合外键。

如果怕重复输入,在[部门名称]那里设个唯一性索引。根据部门名称查表的场合很多,名称字段设个索引总有好处的。

第三种是有百害而无一利,而且有些数据库不支持无主键表
 
设置ID要好一点,如果是将部门名称设置为主键,可扩展就不是太方便了,如果想部门名称不重复可以设置为不重复
 
我要第二种,如果有许多这样的参数,那还不设置上几十个表?
在一个表中用两个参数确定这一个参数
如 
部门代码 A100
部门内部代码 0001
部门名称 财务部
实现起来应该是这样的表
部门代码  部门内部代码  部门名称  XXX
A100    0001      财务部 DDDD
 
用GUID做主键,可保唯一
 
后退
顶部