在数据库创建表时,若没有充足的不设置主键的理由,主键应该设置。在本门课程中判断表设计是否合理时,若表没有设置主键,将判定为表的设计不合理。由于在所有数据库管理系统中,包括Access,不设置主键表格也能创建成功,这导致部分同学创建的表格没有设置主键。那么,为什么在数据库创建表时,主键应该设置呢?
首先,来了解主键的定义。在某个数据表中,若一个(或一组属性)能唯一地标识一个记录,则该个(组)属性为该表的主键。比如,下面的学生表S,包含SNO、PASSWORD、SN、SEX、AGE、DEPT六个属性,分别用于描述学生的学号、密码、姓名、性别、年龄、学院六个属性。其中每个学生的SNO属性的取值都是独一无二的,它能唯一定位到(标识)一个具体的学生,因此属性SNO为学生表S的主键。

同样,下面的课程表C,包含CNO、CN、CT三个属性,分别用于描述课程的课程号、课程名、学时三个属性。其中每门课程的CNO属性的取值都是独一无二的,它能唯一定位到(标识)一门具体的课程,因此属性CNO为课程表C的主键。

再同样,下面的选课表SC,包含SNO、CNO、SCORE三个属性,分别用于描述选课记录的学生号、课程号、成绩三个属性。其中学生的选课搭配(SNO,CNO)的取值都是独一无二的,它能唯一定位到(标识)一个具体的选课记录,因此属性SNO和CNO的组合(SNO,CNO)为选课表SC的主键。

其次,设置主键的好处是什么?这也是为什么在数据库创建表时主键应该设置的原因。
设置主键一个直接的好处就是:可以保证数据库中每一条记录都是有意义的,而不是一条无意义或者荒谬的记录。我们以往SC表中写入一条新记录为例来说明设置主键的好处。在SC表中,主键应该为属性SNO和CNO的组合(SNO,CNO)。在举例之前,大家应该了解在数据库管理系统中,主键唯一地标识一个记录体现为:对一条具体的记录进行保存时,主键列的取值不能为空,也不能重复,即用户新输入一条记录或者更改某条记录时,若违反了这个规则,则记录不能保存。我们以如下三种情况来说明设置主键和不设置主键的区别,并以此体现设置主键的好处:(1)在SC表新输入一条记录时,只输入SNO的值,而不输入CNO和SCORE的值,如下所示:①若没有设置主键,则该记录能顺利保存进数据库,在数据库留下一条无意义的选课记录。因为一条有意义的选课记录必须包含哪个学生(以学生号SNO指定)选了哪门课(以课程号CNO指定),而该条记录仅仅有学生信息(以学生号SNO指定)。②若设置了主键,这条记录无法保存进数据库,不会在数据库留下这条无意义的记录。数据库管理系统提示界面如下:(2)在SC表新输入一条记录时,只输入CNO的值,而不输入SNO和SCORE的值,如下所示:①若没有设置主键,则该记录能顺利保存进数据库,在数据库留下一条无意义的选课记录。因为一条有意义的选课记录必须包含哪个学生(以学生号SNO指定)选了哪门课(以课程号CNO指定),而该条记录仅仅有课程(以课程号CNO指定)的信息。②若设置了主键,这条记录无法保存进数据库,不会在数据库留下这条无意义的记录。数据库管理系统提示界面如下:(3)在SC表新输入一条记录时,同时输入SNO、CNO的值,但数据库中已经存在一条具有同样的SNO、CNO取值的记录,如下所示:①若没有设置主键,则该记录能顺利保存进数据库,在数据库留下荒谬的选课记录。为什么说荒谬呢?上图红框圈起来的两条记录表示的意思就是学生S1的课程C1的分数有两个,分别是80和90,这不是很荒谬吗?②若设置了主键,这条记录无法保存进数据库,不会在数据库留下荒谬的记录。数据库管理系统提示界面如下:通过以上例子,我相信同学们可以充分感受到设置主键的好处和必要性。这就是为什么在数据库创建表时要设置主键的原因。