有一教师关系为:课程任务(工号、教师名、职称、课程名、班级名、学时名),设一位教师可担任多门课,一门课也可由多位教师教,那么:该关系属于(C)。
A.非规范关系B.1NF关系C.2NF关系D.3NF关系
这个怎么是2NF,我怎么感觉是1NF
1NF(第一范式)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值
你这个两个实体,怎么是1NF,当然2NF
从这里我们可以得出结论,在某些特殊情况下,即使关系模式符合 3NF 的要求,仍然存在着插入异常,修改异常与删除异常的问题,仍然不是 ”好“ 的设计。
造成此问题的原因:存在着主属性对于码的部分函数依赖与传递函数依赖。(在此例中就是存在主属性【仓库名】对于码【(管理员,物品名)】 的部分函数依赖。
解决办法就是要在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。
这样,之前的插入异常,修改异常与删除异常的问题就被解决了。
以上就是关于 BCNF 的解释。
第四范式(4NF):要求把同一表内的多对多关系删除。
那么关系SPE(SNO,PNO,ENO)对应的表数据可能是如下:
此时表SPE存在如下的函数依赖:
(PNO,ENO)→SNO
根据BCNF的定义,此时表SPE属于BCNF。但是这样的关系模式仍具有不好的地方:数据冗余度太大。假如供应商S3生产了n个零件,每个零件供应给m个工程,那么显然S3要在表中重复m*n次。
分解表
课程→学生
课程→先修课
两个均是1:N的关系,当出现在一张表的时候,会出现大量的冗余。所以就我们需要分解它,减少冗余。(Ps:该例子主要是为了说明概念帮助理解,具体应用中不会只是这样的简单粗暴的。)
分解表