本专栏收录了数据库的知识点,而从本文起,将讲述有关于关系数据理论中的第一范式、第二范式、第三范式以及BC范式有关知识点,提供给有需要的小伙伴进行学习,本专栏地址可以戳下面链接查看
数据库知识点总结(持续更新中):【数据库知识点】
数据库相关练习题(持续更新中):【数据库练习题】
一个提供给Java学习者的专栏:【拼图小游戏(Java)】
在讲完了码的概念后,本文将讲述范式有关概念(第一、第二、第三和BC范式)
所有属性
都是不可分
的基本数据项完全函数依赖于
R的码,则 R∈2NF假设Sno=2014102,Sdept=CS,Sloc=N的学生还未选课,那么该学生的信息无法插入SLC
原因:课程号是主属性
假定2014104学生只选修了3号课程这一门课,现在因身体不适,不选修3号课程了,要将课程号删除,但同时,由于课程号是主属性,此操作将导致该整个元组的删除。这样,2014104学生信息都被删除了
如果一个学生选修了7门课程,那么他的Sdept和Sloc值就要重复存储了7次
例如某个学生要转系。在修改此学生元组的Sdept值的同时,还可能需要修改住处(Sloc)。如果这个学生选修了K门课,则必须无遗漏地修改K个元组中全部Sdept、Sloc信息
由于学生选修课程的情况与学生的基本情况是分开存储在两个关系中的,在S-L关系中可以插入尚未选课的学生
删除一个学生的所有选课记录,只是SC关系中没有关于该学生的记录了,S-L关系中关于该学生的记录不受影响
不论一个学生选多少门课程,他的Sdept和Sloc值都只存储1次。这就大大降低了数据冗余
学生转系只需修改S-L关系中该学生元组的Sdept值和Sloc值,由于 Sdept、Sloc并未重复存储
,因此减化了修改操作
还不能完全消除关系模式中的各种异常情况和数据冗余
Sloc传递函数依赖于Sno,即S-L中存在非主属性对码的传递函数依赖
S-L关系存在插入异常
、删除异常
、数据冗余度大
、修改复杂
关系模式R ∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Y ⊉ Z),使得X→Y,Y→Z,Y↛X,成立,则称R ∈ 3NF
如果某个系因种种原因(例如刚刚成立),目前暂时没有在校学生我们就无法把这个系的信息存入数据库
如果某个系(如CS)的学生全部毕业了,我们在删除该系学生信息的同时,把这个系的信息也丢掉了
每一个系的学生都住在同一个地方,关于系的住处的信息却重复出现,重复次数与该系学生人数相同
学校调整学生住处时,由于关于每个系的住处信息是重复存储的, 修改时必须同时更新该系所有学生的Sloc属性值
采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖:
在分解后的关系模式中既没有非主属性对码的部分函数依赖,也没有非主属性对码的传递函数依赖,进一步解决了上述四个问题
D-L关系中可以插入
系的信息,即使还没有在校学生
某个系的学生全部毕业了,只是删除S-D关系中的相应元组
,D-L关系中关于该系的信息仍存在
关于系的住处的信息只在D-L关系中存储一次
当学校调整某个系的学生住处时,只需修改
D-L关系中一个元组
的Sloc属性值。
BC范式比较复杂,只需要知道概念即可,具体会在下一篇文章中讲述