3. 试证明如下结论(引理9.1):
X→A1A2…An的充分必要条件是X→Ak成立(k=1,2, …,n)。
证明:略
4. 设有关系模式R(U,F),U={A,B,C,D,E},F={AB→E,DE→B,B→C,C→E,E→A} 1) 计算所有函数依赖左部关于函数依赖集F的属性集闭包;
(AB)+={A,B,C,E}
(DE)+={A,B,C,D,E}
B+={A,B,C,E}
C+={A,C,E}
E+={A,E}
2) 确定关系模式R上的所有侯选关键字; DE
3) 求F的所有最小覆盖。
Fm=F-{AB->E}
5. 假设有一个名为参加的关系,该关系有属性:职工(职工名)、工程(工程名)、时数 (花费在工程上的小时数)和工资(职工的工资);一个参加记录描述一个职工花费在一个工
程上的总时数和他的工资;另外,一个职工可以参加多个工程,多个职工可以参加同一个工 程。请回答如下各问题:
用A、B、C、D分别代表属性职工、工程、时数和工资,则:
1) 确定这个关系的关键字; AB
2) 找出这个关系中的所有函数依赖;
AB->C , A->D
3) 指出这个关系上的哪些函数依赖会带来操作异常现象;
D对关键字AB的部分函数依赖可能会带来如下问题:
数据冗余:一个职工参加多个工程,则职工的工资值会重复;
更新异常:当改变职工的工资时,可能会只修改了一部分,从而造成数据不一致;
插入异常:当一个职工尚未承担工程,但要插入职工信息(如工资)则不允许(因为没 有完整的关键字);
删除异常:当某个工程结束,删除工程信息时,可能会将职工信息(如工资)一同删除 (如果职工只参加了一项工程)。
4) 这个关系是第几范式关系?
2NF
5) 计算该关系上函数依赖集的最小覆盖;
Fm={AB->C, A->D}
6) 将该关系分解成尽可能高的范式,并指明是第几范式?
分解为R1(A,B,C)和R2(A,D)
结果为4NF
6. 一个关系有4个字段A、B、C、D,这里A和B构成复合关键字,问满足下列函数 依赖的关系是第几范式?
1) A、B、C、D都函数依赖于AB。
BCNF或4NF
2) A、B、C、D都函数依赖于AB,而D还函数依赖于C。
2NF
3) A、B、C、D都函数依赖于AB,而D还函数依赖于B。
1NF
4) A、B、C、D都函数依赖于AB,而B还函数依赖于C。
3NF
7. 设有关系模式R(A, B, C, D, E),并有函数依赖{AB→D, AC→E, BC→D,D→A,E→B}, 现将R分解成关系模式S(A, B, C)和其他一些关系模式,请给出在关系模式S上成立的函数 依赖。
AC→B,BC→A
习题十
1. 试叙述概念数据库设计和逻辑数据库设计的区别,并说明各自的主要工作内容。
概念数据库设计是不依赖于任何数据库管理系统的,它是对用户信息需求的归纳。概念 设计的结果得到的是数据库的概念结构,或称概念数据模型,由于它是从现实世界的角度进 行的抽象和描述,所以与具体的硬件环境和软件环境均无关。而在逻辑数据库首先要考虑实
现数据库的数据库管理系统所支持的数据模型是什么,并将概念数据模型转换为数据库管理 系统支持的数据模型。
一般在概念设计阶段主要工作内容有:
.. 确定实体;
.. 确定实体的属性;
.. 确定实体的标识属性(关键字); .. 确定实体间的联系和联系类型;
.. 确定实现实体间联系的属性(外部关键字或连接属性); .. 画出表示概念模型的E-R图;
除此之外,为了以后对模式进行规范化,还需要:
.. 确定属性间的依赖关系。
而在逻辑设计阶段一般主要工作内容有:
.. 确定各个关系模式的主关键字,考虑实体完整性; .. 确定各个关系模式的外部关键字,考虑参照完整性;
.. 确定各个关系模式中属性的约束、规则和默认值,考虑域完整性; .. 根据用户需求设计视图;
.. 考虑安全方案和用户使用权限等。
2. 物理数据库设计主要包括哪些内容?
物理数据库设计的内容是设计数据库的存储结构和物理实现方法。一般包括如下内容:
.. 估算数据库的数据存储量; .. 设计数据库设备; .. 安排数据库的存储; .. 设计索引;
.. 设计备份策略等。
3. 到Sybase公司的网站(http://www.sybase.com.cn)下载PowerDesigner的试用版,实 践利用PowerDesigner进行数据库建模的方法和过程。 略
习题十一
1. 面向对象数据库是在什么背景下产生的?为什么需要面向对象数据库?
在信息管理领域之外还有很多新的应用领域迫切需要使用数据库,如计算机辅助设计 (CAD)、多媒体技术(音频、视频文件的存储和处理)等,这些应用往往需要存储大量的 复杂类型的数据,同时面向对象的概念和技术也强烈地引发了数据库对复杂数据类型的支持,
从而推动了面向对象数据库的发展。
由于关系数据库不直接支持复杂数据类型,致使一些必须使用复杂数据类型的应用实现 起来不是很方便、并且效率较低。另外关系模型也不支持构造类型和继承,这都使得人们希 望发展面向对象的数据库。
2. 什么是对象的封装性、继承性和多态性?
封装性是指将类的数据和操作封装在类定义中,对用户来讲类的“功能”是可见的,而 实现部分是封装在类定义中的,用户是看不见的。这种封闭性保证了每个对象的实现都独立 于其他对象的细节,从而有利于保证软件的质量。
继承性是指可以利用已有的类去定义新的类。如果根据类A定义类B,则说类B继承了 类A,同时把类A称作基类,把类B称作子类。子类不仅可以继承基类的所有性质,还可以
在子类中定义新的性质。继承性使得基类中的代码可以共享和重用,所以继承性有助于软件 可重用性的实现。
多态性是指同一个函数可以有多种作用,即:
.. 同一个函数根据不同的引用对象可以完成不同的功能;
.. 同一个函数即便引用同一个对象,但由于传递的参数不同也可以完成不同的功能。