范式:想要设计一个好的关系,必须使关系满足一定的约束条件。
此约束已经形成了规范,按照这种规范可以使设计简洁的、结构明晰,不会因为插入删除、更新数据导致异常。
常见名词:
属性:也是特征,表中的一列,也叫字段
元组:表中的一行
码:表中唯一确定一个元组的属性,码不止一个,叫这些为候选码。
主码:从候选码挑选出来一个主要确定这一行的属性。
主属性:只要在一个候选码中出现过,这个属性就叫主属性。
非主属性:一次也没出现过
定义:属性不可分。
意思就是表中的属性不能再次拆分。例如你的联系方式属性当中,不能再次拆分电话和邮箱。
定义:不存在组合关键字中的某些字段决定非关键字段。组合关键字不可拆。
例如主属性1、2共同决定了列1、2、3,就是符合范式。
但是如果仅仅是1就能决定三个列,就拆分了主属性,就是不行的。
举例:学号、姓名、年龄、课程名称、成绩、学分。
主属性学号和课程名称,学号决定23,名称决定6,但是14决定2356。
问题剖析:数据冗余,更新异常,插入异常。
冗余的解决办法:拆。
定义:不存在依赖传递。
关键字段——非关键字段1——非关键字段2,这种就是传递。
例如刚才的课程名称就决定了其他的非关键字段,而他自己也是一个非关键字段,不符合3NF。
还是拆表的方式来解决问题。
2NF和3NF的区别:
非主键全部依赖与主键,但是3NF非主键部分依赖于部分主键。
定义:不存在关键字段决定关键字段
关键字段之间不允许有传递关系。例如互相决定。