数据库模式分解的原理是什么?
关系模式的规范化过程是通过分解关系模式来实现的。较低层次的关系模型被分解成几个较高层次的关系模型。这种分解不是唯一的。
归一化就是模态分解,模态分解的原理是等价于原模态,模态分解的标准是:
模式分解具有无损连通性。
模式分解可以保持功能依赖。
示例:关系标准化的过程
第一范式(1NF):如果一个关系模式的每一个组成部分都是不可分的数据项,即其定义域是简单定义域,那么这个关系模式就是第一范式。
例:学生简历和选课数据设计为关系模型学生,表示为:
学生(SNO,名字,年龄,性别,班级,部门号,部门名,CNO,
CNAME,分数,信用)
让这个关系模式满足以下函数依赖关系:
f = { SNO->;斯纳姆,SNO-& gt;年龄,SNO-& gt;性,SNO-& gt;CLASS,CLASS-& gt;德普诺?DEPTNO->;CNO·DEPTNAME-& gt;SNO CNAME。CNO->;得分,CNO-& gt;信用}
因为这个关系模型的每个属性对应的定义域是一个简单定义域,即其定义域值不可分,符合第一范式的定义,所以学生关系模型是第一范式。
第二范式(2NF):如果关系模型r呢?1NF,并且每个非主性质完备函数依赖于代码,就叫r?2NF .
分析一下关系模式学生,是2NF吗?
属性组(SNO,CNO)是关系学生的代码。
例如,SNAME是非主属性,根据代码,它具有以下特征:SNO。CNO?SNAME
根据学生关系模式中的已知函数依赖集,以下函数依赖成立:SNO?SNAME
所以SNO。CNO?SNAME,SNAME对代码是部分函数依赖。同理可以得出,除了SCORE属性,其他非主属性也是部分功能依赖于代码的。所以学生关系模式不是2NF。
当关系模式r是1NF而不是2NF时,对应关系有什么问题?当我们分析学生关系模式时,我们会遇到以下问题:
有大量的冗余数据:当一个学生在学习多门课程时,他的人事信息重复出现。
根据关系模型的完整性规则,主编码的属性值不能为空。那么在大一新生刚入学,还没上什么课的情况下,元组是插不进关系的。这种情况称为插入异常。
还要删除异常,信息会丢失。
解决上述问题的方法是将一个大的模式分解成几个小的模式,分解后的模式可以满足更高层次范式的要求。