整体流程如下图:
具体操作我们来看例题:
例 1 :
一名员工可以在多个项目中工作。
项目编号,对于项目是唯一的,员工编号对于员工是唯一的,职务代码唯一标识职务。
可以有多个具有相同职称的员工。小时工资是针对某一工作的。例如,对所有程序员来说,费率是55美元。
第一范式: 第二范式: 分析可知,只有assign_hours是完全依赖组合主键的,其他的都只依赖于emp_num。所以第二范式为: 第三范式: 分析可知,在非组合组件中job系列是有传递关系的,所以我们把job系列再写成一个表,如下: 例 2 :
年是书出版的年份。
序列(seq)列显示作者在封面上出现的顺序。
一个作家能写很多书。一本书可以由多个作者撰写。
一本书只能由一个出版商出版。
一本书的标价。
第一范式: 因为一本书只能由一个出版商出版,所以这里pub系列与BookCode(pk)是相关的。
第二范式: 这里只有Seq是和组合主键是相关的,所以把AuID给提出来,如图: 第三范式: 在非组合主键中我们发现pub系列是有传递关系的,所以单独放在一个表里,如图: 例 3 :
有几种贷款类型:住房、汽车、建筑、透支和教育
loan id是唯一的标识符,用于标识银行提供的每个贷款。
利率是以贷款为基础的固定利率。
贷款期限是指贷款还本付息的年限(利息按利率计算)。贷款期限根据贷款类型和客户信用价值确定。
顾客可以要求借多少钱。但是,贷款金额是根据贷款类型和客户信用记录确定的。
合同日期是贷款发放的日期。
第一范式: 第二范式: 依赖关系如上图,所以第二范式为: 第三范式: 在非主键元素中我们并没有发现传递关系,所以第三范式为:
这里我们引入一个验证A是B的主键的方法: A中每一种元素都对用B中一种元素。 例如: 每种LoanID都对应一种LoanType,而每种LoanID对应了多种LoanTerm。所以LoanID是LoanType的主键而不是LoanTerm的。
