关系数据库的模式设计

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

关系模式的设计问题

关系数据库的设计理论主要包括三个方面的内容:数据依赖、范式、模式设计方法。其中数据依赖起核心作用。

例:R(TNAME,ADDRESS,C#,CNAME)

限定事实:一个教师只有一个地址;

一个教师可教若干门课;

每门课程只有一个教师任教。

所以R的键是(TNAME,C#)。

实际使用中存在的问题:

1.数据重复

2.更新异常

3.插入异常

4.删除异常

采用对属性间的函数依赖来解决,使用分解方法,将R分解成两个模式:

R1(TNAME,ADDRESS)

R2 (TNAME,C#,CNAME)

分解后,四个问题解决基本解决。即每个教师的地址只存放一次,即使一个教师没有教学任务,他的地址也可存放在R1中。

但是这种分解并非最佳。例如要检索教某门课的教师的地址,就需要进行联接操作,但是代价太大。

函数依赖

函数依赖的定义

设有关系模式R(A1,A2,…,An)或简记为R(U),X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t1,t2,由t1[X]=t2[X]导致t1[Y]=t2[Y],则称X函数决定Y,或Y函数依赖于X,记为X→Y。 X→Y为模式R的一个函数依赖。

这里的t1[X]表示元组t1在属性集X上的值,t2[X]表示元组t2在属性集X上的值,函数依赖是对关系R的一切可能的当前值r定义的,不是针对某个特定关系。

函数依赖不是指关系模式R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。不能只看到关系模式R的一个特定关系,就推断那些函数依赖对于R成立。

在关系模式R中,要判断FD是否成立,惟一的办法是仔细考察属性的含义。即函数依赖实际是对现实世界的断言。

例:学习关系R(S#,SN,C#,G,CN,TN,TA)

在R中的关系r中,存在函数依赖:

S#→SN(每个学号只能有一个学生姓名)

C# →CN(每个课程只能对应一门课程名)

TN →TA(每个教师只能有一个年龄)

(S#,C#) →G(每个学生学习一门课只能有一个成绩)

函数依赖的逻辑蕴涵

这里主要研究对于给定的一组函数依赖,如何判断另外一些函数依赖是否存在。

定义:设F是关系模式R的一个函数依赖集,X,Y是R的属性子集,如果从F中的函数依赖能够推出X→Y,则称F逻辑蕴涵X→Y,记为F?=X→Y。

被F逻辑蕴涵的函数依赖的全体构成的集合,称为F的闭包,记为F+。

•键

键是惟一标识实体的属性集。这里把键和函数依赖结合起来,做一个准确的定义。

设有关系模式R(A1,…,An),F是R上的函数依赖集,X是{A1,…,An}的一个子集。如果

1.X→A1A2…An∈ F+,且

2.不存在X的真子集Y,使得Y→A1A2…An成立,则称X是R的一个候选键。

在定义中A1A2…An是A1∪A2∪…∪An的简写。1表示X能惟一决定一个元组;2表示X能满足1而又无多余的属性集。

例:设关系模式R(XYZ),已知FD是X→Y和Y→Z,那么可以推出X→XYZ也在F+中,但X的真子集(此处是空集)不可能函数决定XYZ,因此,X是模式R的键。

例:R(S#,SNAME,SEX,AGE)

在该模式中,S#→ (S#,SNAME,SEX,AGE)

S#不存在任何真子集,所以S#是键。

(S#,SNAME)也可以决定R中的全部属性,但它不是键,因为其中含有真子集S#,可以决定R的所有属性。

函数依赖的推理规则

ARMSTRONG推理规则

设有关系模式R(A1,A2,…,An)和属性集U= A1A2…An,X,Y,Z,W都是U的子集,F是R上只涉及到U中属性的函数依赖集,推理规则如下:

1.自反律

如果YÍXÍU,则X→Y在R上成立。

2.增广律

如果X→Y为F所蕴涵,ZÍU,则XZ→YZ在R上成立。(XZ表示X∪Z)

3.传递律

如果X→Y和Y→Z在R上成立,则X→Z在R上也成立。

4.合并律

如果X→Y和X→Z成立,那么X→YZ成立。

5.伪传递律

如果X→Y和WY→Z成立,那么WX→Z成立。

6.分解律

如果X→Y和ZÍY成立,那么X→Z成立。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航