关系模式
**一、关系模式设计的问题**
(1)数据冗余
一个表里面的数据的基本信息重复。
(2)数据更新
如果要更新某个同学的一项信息,不仅要修改他这一项,还要修改其他的值,使数据复杂化。
(3)数据插入
比如S-L-C表,有了sdept和sloc得值有了,因为没有招生,sno和cno为空,但他们又是主键,不能为空。
(4)数据删除
如果一个学生只选了一门课,之后又放弃了,然后需要删除他的选课记录。但他只选择了一门,所以在删除他的选课记录使也会删除它的其他信息。
**二、函数依赖**
(1)基本概念
x函数决定y,或者y函数依赖于x表示为:X→Y。
例如:
1、对学生关系模式student(sno,sname,sdept,sage)
sno→sname,sno→sdept,sno→sage
2、对学生选课关系模式sc(ano,cno,grade)
(sno,cno)→grade
(2)一些术语和符号
1、如果X→Y,但y不包含x,则称X→Y使费平凡得函数依赖。
2、如果y函数不依赖于x,则记作X\→Y。
3、如果X→Y,则称x为决定因子。
4、如果X→Y,并且Y→X,则记作X↔Y。
5、完全函数依赖:X→Y,且对于x得一个任意真子集x’都有X‘\→Y,则y完全函数依赖于x,记作X→f Y;如果成立X‘→Y,则y部分函数依赖于x,记作X→p Y。
6、如果X→ Y(非平凡函数依赖,并且Y\→X)、Y→Z,则Z传递函数依赖于X。
7、设k为关系模式R得一个属性或者属性组,若满足:
K→f A1,K→f A2,.....,K→f An
则K为关系模式R得候选键(候选码)。称包含在候选键中得属性为主属性,不包含在任何候选码中的属性称为非主属性。
例如:
设有关系模式sc(sno,snae,cno,gredit,grade),其中各属性分别为:学号、课程号、姓名、学分和成绩,主键为(sno,cno),则
sno→sname 姓名函数依赖于学号
(sno,cno)→p sname 姓名部分函数依赖于学号和课程号
(sno,cno)→f grade 成绩完全函数依赖于学号和课程号
设有关系模式S(sno,sname,cno,gredit,Dept_master),其中学号、姓名、所在系、系主任(假设一个系只有一个主任)主键为sno,则
sno→sname 姓名完全函数依赖于学号
由于有:
sno →f sdept 所在系完全函数依赖于学号
sdept →f Dept_master 系主任完全函数依赖于所在系
因此:
sno →传递 Dept_master 系主任传递函数依赖于学号
一、Armstrong公理
1、自反律(reflexivity)
若YXY,则X→ Y在R上成立,即一组属性函数决定它的所有子集。
例如:对关系模式sc(sno,sname,cno,gredit,grade),有
(sno,cno)→cno 和(sno,cno)→sno
(2)增广律
若X→ Y在 R上成立,且ZU,则XZ→ YZ在R上也成立。
(3)传递律
若X→ Y和Y→ Z在 R上成立,则X→ Z在R上也成立。
二、Armstrong公理推论
(1)合并规则
若X→ Y和X→ Z在 R上成立,则X→YZ在R上也成立。例如,对关系模式student(sno,sname,sdept,sage),有sno→(sname,sdept),sno→sage,则有sno→(sname,sdept,sage)成立。
(2)分解规则
若X→ Y 和ZU在 R上成立,则X→ Y在R上也成立。
(3)伪传递规则
若X→ Y和YW→ Z在 R上成立,则XW→ Z在R上也成立。
(4)复合规则
若X→ Y和W→ Z在 R上成立,则XW→YZ在R上也成立。
例如,对关系模式sc(sno,snae,cno,gredit,grade),有:
sno→sname 和 cno→gredit 成立
则有:(sno,cno)→(sname,gredit)