一 三大范式
数据库设计三大范式:
- 第一范式:确保每列保持原子性,即列不可再分
- 第二范式:确保表中的每列都和主键相关,即每列完全依赖主键而不是依赖主键的一部分,主要针对联合主键的情况
- 第三范式:确保表中的每列都和主键直接相关,不能存在依赖传递,例如表中的某一列是另外几列的主键,那么另外几列应该被拆分到另外一张表中
https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html
1.1 第一范式
如何理解第一范式?即如果有一列是地址,例如河南省开封市通许县康力路,那么可以拆分为四列:省、市、区/县、详细地址;河南省、开封市、通许县、康力路。
1.2 第二范式
比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。
订单信息表
该表中的商品单位和价格等信息只依赖于商品编号,不依赖于联合主键,这就违反了第二范式;可以将该表以下面的方式进行改造
订单信息主表、订单信息从表、商品信息表
这样子就降低了耦合,减少了冗余,需要什么数据就去哪个表里面取
联合查询方式:使用主表的订单编号关联从表,再用商品编号关联商品信息表即可获取所有信息
1.3 第三范式
确保表中的每列都直接和主键相关,不存在依赖传递
表中的某一列依赖主键且是是另外几列的主键,那么另外几列应该被拆分到另外一张表中
比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。
二 六种约束
- 主键约束:PAIMARY KEY
- 外键约束:FOREIGN KEY
- 唯一约束:UNIQUE
- 非空约束:NOT_NULL
- 默认约束:DEFAULT
- 检查约束:CHECK
主键约束:包含非空和唯一,单列或者多列作为一条记录的唯一标识
外键约束:保证一个表中的数据匹配另外一张表中的值的完整性
唯一约束:加在一列或者多列上,保证数据不重复
非空约束:加了该约束的列中的数据不能为空
默认约束:新增或修改的时候如果没有给列赋值,会有一个默认值
检查约束:保证列中的值符合条件