【MYSQL】表的设计-LMLPHP

数据库约束

  • 是关系型数据库的一个重要功能,
  • 主要作用是保证数据的完整性,也可能理解数据的正确性(数据本身是否正确,关联关系是否正确),
  • 人工检查数据完整性的工作量非常的大,在数据表中定义一些约束,那么数据库写入数据的时候,数据库会帮我们做校验工作,
  • 约束一般是指定在列上的,
  • 使用在表的定义时在要约束的列的类型后加上。

not null 约束

表示该列不能存储null值。

如果存入null会报错。

【MYSQL】表的设计-LMLPHP

unique (唯一)约束

表示该列中的数据不能重复(null)除外。

插入相同或者已有的值会报错。

【MYSQL】表的设计-LMLPHP

default 默认值约束

指定列为空时的默认值。
【MYSQL】表的设计-LMLPHP

primary key (主键)约束

相当于是not null 和 unique的结合,

表示该列中的数据既不能重复也不能为空。

如果存入null会报错。插入相同或者已有的值也会报错。

当主键是整型时,我们常常加上auto_increment让主键从当前最大值加1,

但是当插入错误时该值相当于被生成了,下一个从这个开始。

通俗将就是当前主键最大值为7,然后插入时报错了,改回来后插入行主键为9。

【MYSQL】表的设计-LMLPHP

一张表中最多只能定义一个主键,定义超了就会报错,

要想多列为主键只能使用复合主键primary key (列名1, 列名2)

使用复合主键,必须列值都相同才算重复,任一列值都不能为null。

【MYSQL】表的设计-LMLPHP

foreign key (外键)约束

保证一个表中的数据匹配另一个表中的值的参照完整性。

就是将另一个表中的值作为该表中该列的范围。

被外键约束的列在约束前先定义,

语法是foreign key (列名) references 外表名(外列名)

被外键约束的表还存在就不能删除外表。

【MYSQL】表的设计-LMLPHP

check 约束

该约束在5.7版本不能使用,导致兼容性不好,所以一般不用。

使用了该约束后该列只能插入被约束的值。

【MYSQL】表的设计-LMLPHP

总结

表的设计

一般我们编程流程如下:

设计表:

  1. 从需求中获得类,类对应到数据库中的实体,实体在数据库中就表现为一张一张的表,类中的属性就对应着表中的字段(列),
  2. 确定类与类之间的关系,
  3. 使用SQL去创建具体的表。

三大范式

设计表的时候我们一般要遵循一些规则,这些规则我们一般称之为三大范式。
范式就是描述数据关系的模型,下面只介绍三大范式。

第一范式

第一范式是关系型数据库最基本的要求,不满足第一范式的数据库不是关系型数据库。
也就是在定义表时每个字段都可以用一种数据类型来表示,那么这个表就是满足第一范式的。

第二范式

非关键字段即非主键字段,候选字段可以理解为主键或者没有主键时的唯一键。

对于由两个或多个关键字段(复合主键)决定一条记录的情况,如果一行数据中有些字段只与关键字段中的一个有关系,那么这种就说他只存在部分函数依赖。

表中没有复合主键的表天然满足第二范式。

第三范式

在第二范式的基础上,不存在非关键字段,对任一候选键的传递依赖。

两个强相关关系存在传递现象,这种传递关系称为传递依赖。比如学生表中拿到学号,可以根据学号拿到学校,根据学校又可以拿到学院等信息。

表的关系

  1. 一对一:
    比如一个人只有一个身份证一样。
  2. 一对多:
    比如一个班级拥有多个学生一样。
  3. 多对多:
    比如一个学生选多个课程,一个课程被多个学生选一样。
08-12 10:51