数据库基础有关问题-建表时主键怎么设置

数据库基础问题--建表时主键如何设置
比如建一个学生表有如下字段:学号,姓名,班级,性别

一般建表时我这样做:

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

第二种设置其实主要是为了防止后期主键变更所带来的维护不变,用自增字段也就是标识字段不影响整体数据表