数据库设计三大范式应用实例剖析 引言 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(u pdate)操作异常
反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息
设计范式是不是很难懂呢
非也,大学教材上给我们一堆数学公式我们当然看不懂,也记不住
所以我们很多人就根本不按照范式来设计数据库
实质上,设计范式用很形象、很简洁的话语就能说清楚,道明白
本文将对范式进行通俗地说明,并以笔者曾经设计的一个简单论坛的数据库为例来讲解怎样将这些范式应用于实际工程
范式说明 第一范式(1NF):数据库表中的字段都是单一属性的,不可再分
这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等
例如,如下的数据库表是符合第一范式的: 字段 1 字段 2 字段 3 字段 4 而这样的数据库表是不符合第一范式的: 字段 1 字段 2 字段 3 字段 4 字段 3
1 字段 3
2 很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS 不允许你把数据库表的一列再分成二列或多列
因此,你想在现有的DBMS 中设计出不符合第一范式的数据库都是不可能的
第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字
假定选课关系表为SelectCou rse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系: (学号, 课程名称) → (姓名, 年龄, 成绩, 学分) 这个数据库表