数据库设计三大范式和五大约束

【三大范式】

第一范式(1NF):

  数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。

  例如: userInfo: '山东省烟台市 1318162008' 依照第一范式必须拆分成
                   userInfo: '山东省烟台市'   userTel: '1318162008'两个字段

第二范式(2NF):

  满足1NF后要求表中的所有列,都必需依赖于主键,而不能有 任何一列与主键没有关系(一个表只描述一件事情)。

  例如:订单表只能描述订单相关的信息,所以所有的字段都必须与订单ID相关。
                  产品表只能描述产品相关的信息,所以所有的字段都必须与产品ID相关。
        因此在同一张表中不能同时出现订单信息与产品信息。

第三范式(3NF):满足2NF后,要求:表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)

  例如:订单表中需要有客户相关信息,在分离出客户表之后,订单表中只需要有一个用户
       ID即可,而不能有其他的客户信息,因为其他的用户信息是直接关联于用户ID,而不是关联
       于订单ID。

【数据库五大约束】

1.主键约束(Primay Key Coustraint) 唯一性,非空性;

2.唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个;

3.默认约束 (Default Counstraint) 该数据的默认值;

4.外键约束 (Foreign Key Counstraint) 需要建立两表间的关系;

5.非空约束(Not Null Counstraint):设置非空约束,该字段不能为空。

五大约束的语法示例:

1. 添加主键约束

Alter table 表名 add Constraint 主键名 primary key(字段)

2.  添加唯一约束

Alter table 表名 add Constraint 约束名 unique(字段)

3.  添加默认约束

Alter table 表名 add Constraint 约束名 default(默认内容) for 字段名

4.  添加检查约束

Alter table 表名 add Constraint 约束名 check (字段表达)

5.  添加外键约束

Alter table 表名 add Constraint 约束名 foreign key(字段) references 表名(字段名)

详细介绍:

(1)[主键约束](Primay Key Coustraint) 
1.主键的注意事项:主键默认非空,默认唯一性约束,只有主键可以设置自动增长(主键不一定自增,自增一定是主键)。
2.设置主键的方式:

  ①:在定义列时设置:id     INT UNSIGNED PRIMARY KEY。
  ②:在列定义完成后设置:PRIMARY KEY(id)

(2)[外键约束 (Foreign Key Counstraint) ]

1.设置外键的注意事项:
  ①:只有INNODB的数据库引擎支持外键,修改my.ini文件设置default-storage-engine=INNODB;
  ②:外键与参照列的数据类型必须相同。(数值型要求长度和无符号都相同,字符串要求类型相同,长度可以不同);
  ③:设置外键的字段必须要有索引,如果没有索引,设置外键时会自动生成一个索引;

2.设置外键的语法:

[CONSTRAINT 外键名] FOREIGN KEY(外键字段) REFERENCES 参照表(参照字段)  [ON DELETE SET NULL ON UPDATE CASCADE] -- 设置操作完整。

3、外键约束的参照操作:
当对参照表的参照字段进行删除或更新时,外键表中的外键如何应对。
参照操作可选值:
  RESTRICT: 拒绝对参照字段的删除或修改(默认);
  NO ACTION:与RESTRICT相同,但这个指令只在MySql生效;
  CASCADE:  删除或更新参照表的参照字段时,外键表的记录同步删除或更新;
  SET NULL: 删除删除或更新参照表的参照字段时,外键表的外键设为NULL (此时外键不能设置为NOT NULL)。

猜你喜欢

转载自blog.csdn.net/chpllp/article/details/83028240