数据库基础有关问题-建表时主键怎么设置
数据库基础问题--建表时主键如何设置
比如建一个学生表有如下字段:学号,姓名,班级,性别
一般建表时我这样做:
stuno int pk,
sname varchar ,
class carchar ,
sex varchar
最近看到这样的:
id int pk,
stuno int ,
sname varchar ,
class carchar ,
sex varchar
请问第二种方式有什么好处?或者为什么要这样做?
谢谢大家!!
------解决方案--------------------
用户可见的字段,哪怕现在用户、需求说唯一、不会变,也不要设置为主键
应该增加一个内部的自增id(用户不可见),作为主键——即第二种做法
这与数据库无关,与中国国情有关:
现在口口声声说不变的字段,只要是用户可见的,就有可能:日后用户领导说要变,用户就要求变的
------解决方案--------------------
现在很多高并发网站都这样设计,这种设计,把一个自增的ID当做主键,但却没有实际意义。
这么设计的思想,我认为:
1、现在应对高并发的复杂WEB设计,为了达到解耦的目的,去除了外键的设计。
2、因没有外键,主键的意义除了防重和自带索引外,我知道的没有其他的用处了,因为防重我们可以用 inser xxxx where notExit ... 来处理
3、使表更灵活,对索引的添加删除、表结构变更 都有益处。
------解决方案--------------------
------解决方案--------------------
第二种设置其实主要是为了防止后期主键变更所带来的维护不变,用自增字段也就是标识字段不影响整体数据表
比如建一个学生表有如下字段:学号,姓名,班级,性别
一般建表时我这样做:
stuno int pk,
sname varchar ,
class carchar ,
sex varchar
最近看到这样的:
id int pk,
stuno int ,
sname varchar ,
class carchar ,
sex varchar
请问第二种方式有什么好处?或者为什么要这样做?
谢谢大家!!
------解决方案--------------------
用户可见的字段,哪怕现在用户、需求说唯一、不会变,也不要设置为主键
应该增加一个内部的自增id(用户不可见),作为主键——即第二种做法
这与数据库无关,与中国国情有关:
现在口口声声说不变的字段,只要是用户可见的,就有可能:日后用户领导说要变,用户就要求变的
------解决方案--------------------
现在很多高并发网站都这样设计,这种设计,把一个自增的ID当做主键,但却没有实际意义。
这么设计的思想,我认为:
1、现在应对高并发的复杂WEB设计,为了达到解耦的目的,去除了外键的设计。
2、因没有外键,主键的意义除了防重和自带索引外,我知道的没有其他的用处了,因为防重我们可以用 inser xxxx where notExit ... 来处理
3、使表更灵活,对索引的添加删除、表结构变更 都有益处。
------解决方案--------------------
1,业务实体层,用标识列作为主键
2,支持层,如果一个表从来不作为另一个表的主表,则用复合主键。
------解决方案--------------------
id int pk, --应该是这样吧 id int identity(m.n) primary key
stuno int ,
sname varchar ,
class carchar ,
sex varchar
第二种设置其实主要是为了防止后期主键变更所带来的维护不变,用自增字段也就是标识字段不影响整体数据表