三大范式
一种数据库设计理念,意义在于
降低耦合
写代码 = 高内聚 低耦合
一个表只有一个主键
一个主键可以是多列
第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项
,即列中存储的数据是最小的数据单元,不能再分解为更小的部分。例如,如果一个属性包含多个值,必须将其拆分为不同的属性。第一范式是关系数据库设计的基本要求,确保数据的原子性
案例
分析:
- 上方不符合原子性
优化:
- 家庭信息 = 人口数量、籍贯
- 学校信息 = 学历、年级
**第二范式(2NF)**:在满足第一范式的基础上,要求数据库表中的每个实例(实体)或记录必须可以被唯一区分
。此外,所有非主键字段必须完全依赖于主键,不能只依赖主键的一部分
。这意味着如果存在部分依赖
的情况,需要将相关的属性移到与其完全依赖的关系中,以消除部分依赖
案例
优化:
- 订单表 =
订单编号
+商品编号
+ 数量 - 商品表 =
商品编号
+ 商品名称 + 价格 + 单位 - 客户表 =
订单编号
+ 客户名称 + 所属单位 + 联系方式
**第三范式(3NF)**:在满足第二范式的基础上,进一步要求非主键字段之间不能存在传递依赖
。即非主键字段必须直接依赖于主键,而不能通过其他非主键字段间接依赖主键。这有助于减少数据冗余,提高数据的一致性和完整性。
案例:外键
优化
- 学生表 = 学号 + 姓名 + 性别 + 家庭人口 +
班主任教师编号
- 教师表 =
教师编号
+ 姓名 + 性别 + 年龄