数据库基础问题--建表时主键如何设置

mr_wangb 2014-05-24 09:34:47
比如建一个学生表有如下字段:学号,姓名,班级,性别

一般建表时我这样做:

stuno int pk,
sname varchar ,
class carchar ,
sex varchar

最近看到这样的:

id int pk,
stuno int ,
sname varchar ,
class carchar ,
sex varchar
请问第二种方式有什么好处?或者为什么要这样做?
谢谢大家!!
...全文
1216 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
haitao 2014-05-25
  • 打赏
  • 举报
回复
用户可见的字段,哪怕现在用户、需求说唯一、不会变,也不要设置为主键 应该增加一个内部的自增id(用户不可见),作为主键——即第二种做法 这与数据库无关,与中国国情有关: 现在口口声声说不变的字段,只要是用户可见的,就有可能:日后用户领导说要变,用户就要求变的
HUSTYZHY 2014-05-25
  • 打赏
  • 举报
回复
加上"PRIMARY key"?
Neo_whl 2014-05-25
  • 打赏
  • 举报
回复

id        int   pk,  --应该是这样吧  id int identity(m.n) primary key
stuno   int    ,
sname varchar ,
class  carchar ,
sex    varchar
第二种设置其实主要是为了防止后期主键变更所带来的维护不变,用自增字段也就是标识字段不影响整体数据表
极品老土豆 2014-05-25
  • 打赏
  • 举报
回复

1,业务实体层,用标识列作为主键
2,支持层,如果一个表从来不作为另一个表的主表,则用复合主键。
mr_wangb 2014-05-25
  • 打赏
  • 举报
回复
引用 2 楼 GANSUYZHY 的回复:
加上"PRIMARY key"?
恩恩,不好意思,我简写了! 你知道那个是为什么吗?
菜鸟大明 2014-05-25
  • 打赏
  • 举报
回复
现在很多高并发网站都这样设计,这种设计,把一个自增的ID当做主键,但却没有实际意义。 这么设计的思想,我认为: 1、现在应对高并发的复杂WEB设计,为了达到解耦的目的,去除了外键的设计。 2、因没有外键,主键的意义除了防重和自带索引外,我知道的没有其他的用处了,因为防重我们可以用 inser xxxx where notExit ... 来处理 3、使表更灵活,对索引的添加删除、表结构变更 都有益处。

34,575

社区成员

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

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