数据库复习题答案

更新时间:2023-11-04 21:29:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《数据库与信息系统》参考题

一、基本知识点

1.数据库管理系统由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。这些数据用以描述某个特定的企业。DBMS的基本目标是要提供一个可以让人们方便地、高效地存取信息的环境。

2.数据库系统用于存储大量信息。对数据的管理既涉及到信息存储结构的定义,又涉及到信息操作机制的提供。另外,数据库系统还必须提供所存储数据的安全性保证,即使在系统崩溃或有人企图越权访问时也应如此。如果数据被多用户共享,那么系统还必须设法避免可能产生的异常结果。

3.数据库系统的一个主要目的是要提供给用户数据的抽象视图,也就是说,系统隐藏了数据存储和维护的细节。这是通过定义三个可对数据库系统进行观察的抽象层次来实现的。这三个层次是:物理层、逻辑层和视图层。 4.数据库结构的基础是数据模型,一个用于描述数据、数据间关系、数据语义和数据约束的概念工具的集合。 5.随着时间的推移,信息会被插人或删除,数据库随之也发生了改变。特定时刻存储在数据库中的信息的集合称作数据库的一个实例。数据库的总体设计称作数据库模式。

6.在某个层次上修改模式而不影响较高一层模式的能力叫做数据独立性。有两个层次的数据独立性:物理数据独立性和逻辑数据独立性。

7.数据库模式通过一系列用数据定义语言(DDL)表达的定义来描述。DDL语句经过编译,产生存储在一个特殊文件中的一系列表,这个文件称作数据字典,因此数据字典中存储的是元数据。

8.数据操纵语言DML是使得用户可以访问和操纵数据的语言,主要有两种:过程化的DML和非过程化的DML。过程化的DML要求用户指明需要什么数据以及如何获得这些数据,非过程化的DML只要求用户指明需要什么数据,而不必指明如何获得这些数据。

9.事务管理器负责保证无论是否有故障发生,数据库都要处于一致的(正确的)状态。事务管理器还保证并发事务的执行互不冲突。存储管理器是在数据库中存储的低层数据与应用程序及向系统提交的查询之间提供接口的程序模块。存储管理器负责与磁盘上存储的数据进行交互。

10.实体一联系(E--R)数据模型基于对现实世界的这样一种认识:世界由一组基本对象(称作实体)及这些对象间的联系组成。此模型的主要目的是服务于数据库设计过程,它的发展是为了帮助数据库设计,这是通过允许定义企业模式来实现的。企业模式代表了数据库的全局逻辑结构,这种全局结构可以用E-R图进行图形化表示。

11.实体是实际存在的可区别于其他对象的对象,我们通过把每个实体同描述该实体的一组属性相联系来将它与其他对象相区别。联系是多个实体间的相互关联。相同类型的所有实体的集合构成实体集,相同类型的所有联系的集合构成联系集。

12.映射的基数指明另一实体通过联系集可以和实体集中的多少个实体相联。

13.数据库建模的一个重要任务是要说明实体之间以及联系之间如何相互区别二概念上来说,各个实体或联系是互不相同的,但从数据库的角度来看,它们的差异必须用属性表示出来。为了进行这样的区别,为每个实体集指定一个主码。主码是一个或多个属性的集合,这些属性的整体可以使我们在实体集中唯一确定一个实体或在联系集中唯一确定一个联系。

14.特殊化和概括定义了一个高层实体集和一个或多个低层实体集之间内容上的联系。特殊化是取出高层实体集的一个了集来形成一个低层实体集。概括是用两个或多个不相交的(低层)实体集的并集来形成一个高层实体集。高层实体集的属性被低层实体集继承。

15.ER模型的一个局限是它不能表示联系间的联系,解决的办法是采用聚集。聚集是一种抽象,它将联系集看作高层实体集,这样,联系集及其相关实体集就可以像其他实体一样被看作高层实体集。

16.符合ER图的数据库可以用表的集合来表示。数据库的每个实体集和联系集都有唯一与之对应,表名即为相应的实体集或联系集的名称。每个表有多个列,每列有其唯一列名的表。

17.关系数据模型建立在表的集合的基础上。数据库系统的用户可以对这些表进行查询,可以插入新元组、删除元组以及更新(修改)元组。表达这些操作的语言有几种。元组关系演算和域关系演算是非过程化语言,代表了关系杳询语言所需的基本能力。关系代数是一种过程化语言,在能力上它等价于限制在安全表达式范围内的关系演算的两种形式::关系代数定义了关系查询语言中使用的基本运算。

18.域约束指出了与属性相关联的可取值的集合。它也可以禁止某属性上取空值。参照完整性约束保证一个关系的给定属性集上的取值也出现在另一关系的某个属性集上。函数依赖是码依赖的扩展。它要求某属性集的值唯一确定另一属性集的值。

19.良好数据库设汁的三个准则:1)BCNF 2)无损连接。3)保持依赖。

20.什么是超码、候选码、主码、外码?

码是数据系统中的基本概念。所谓码就是能唯一标识实体的属性,他是整个实体集的性质,而不是单个实体的性质。它包括超码,候选码,主码。 超码是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地标识一个实体。如果K是一个超码,那么K的任意超集也是超码,也就是说如果K是超码,那么所有包含K的集合也是超码。 候选码是从超码中选出的,自然地候选码也是一个或多个属性的集合。因为超码的范围太广,很多是我们并不感兴趣即无用处的。所以候选码是最小超码,它们的任意真子集都不能成为超码。例如,如果K是超码,那么所有包含K的集合都不能是候选码;如果K,J都不是超码,那么K和J组成的集合(K,J)有可能是候选码。 是从多个候选码中任意选出一个做为主码,如果候选码只有一个,那么候选码就是主码。虽然说主码的选择是比较随意的,但在实际开发中还是要靠一定的经验,不然开发出来的系统会出现很多问题。一般来说主码都应该选择那此从不或者极少变化的的属性。

超码:一个或多个属性的集合,这些属性的组合可以使我们在一个实体集中唯一的标识一个实体。

\\例如:学生是一个实体,则学生的集合是一个实体集,而超码是用来在学生的集合中区分不同的学生。假设学生(实体)具有多个属性:学号,身份证号,姓名,性别。因为通过学号可以找到唯一一个学生,所以{学号}是一个超码,同理{学号,身份证号}、{学号,身份证号,姓名}、{学号,身份证号,姓名,性别}、{身份证号}、{身份证号,姓名}、{身份证号,姓名、性别}也是超码.在这里,因为不同的学生可能拥有相同的姓名,所以姓名不可以区别一个学生,既{姓名}不是一个超码,{性别}、{姓名、性别}也不是。 虽然超码可以唯一标识一个实体,但是可能大多数超码中含有多余的属性。所以我们需要候选码。 候选码:如果任意超码的真子集不能包括超码,则称其为候选码;超码包括候选码;

在上例中,只有{学号}、{身份证号}都是候选码;另外,如果性别和姓名可以唯一标识一个学生,则{姓名,性别}也为超码。 主码:被数据库设计者选中的,用来在同一实体集中区分不同实体的候选码;此外,应该选择哪些从不或极少变化的属性; 总结: 所有码都是一个集合。 所有可以用来在实体集中标识唯一实体的集合,都是超码。 如果任意超码的真子集不能包括超码,则称其为候选码。 被数据库设计者选中的,用来在同一实体集中区分不同实体的候选码。 超码包括候选码,候选码包括主码

21.关系代数六个基本运算包括哪些?(“选择”、“投影”、笛卡尔积、并集、差集和“重命

名”Codd 的代数的六个原始运算是“选择”、“投影”、笛卡尔积(也叫做“叉积”或“交叉连接”)、并集、差集和“重命名”。(实

)

际上,Codd 忽略了重命名,而 ISBL 的发明者显著的包括了它)。这六个运算在省略其中任何一个都要损失表达能力的意义上是基本的。已经依据这六个原始运算定义了很多其他运算。其中最重要的是交集、除法和自然连接。

并、差、笛卡尔积、投影和选择5种运算为基本的运算。其他3种运算,即交、连接和除,均可以用这5种基本运算来表达。 (1)R∩S=R-(R-S) 或 R∩S=S-(S-R) (2) = AθB(R×S) = A=B(R×S)

R∞S=∏ ( R.B=S.B(R×S))

(3)R÷S =∏X(R)-∏X(∏X(R)×∏Y(S)-R)

22.空值NULL的含义是什么?(空值不是空格值,它是跳过或不输的属性值,用Null表示,空值说明不知道或无意

思。

数据库中的数据表,每个字段都可以设置不同的数据类型。

而某些数据库字段,默认产生的值就是空值,空值在显示的时候,是通过NULL来显示的。

所以,很多人都对“空值”产生疑问,例如通过编程新建的一个表,表中所有数据皆显示为NULL,手动添加并删除文字后又变成了空白;一个字符串类型的字段,明明没有填值,却不等于\;用ADO.NET从数据库中取值,又会出现错误。 一切问题的根源在于空值的误解及应用。这需要我们正确认识.NET和SQL Server中几种不同的“空值”。 ①真正的空值

等同“没有输入的值”,可以出现在大多数类型的字段中(除非默认不允许为空),SQL server中表示为null,显示为NULL,手工在SQL server企业管理器中输入的方法是按Ctrl+0。它在.NET中对应System.DBNull.Value。

在T-SQL命令中,判断一个值是不是空值,要用“is null”而不是“= null”;处理空值有个ISNULL函数,它使用指定的值替换null。用ADO.NET从数据库得到的空值无法自动转化为空字符串或Nothing,须手动检测:如果得到System.DBNull.Value,则赋给数据对象Nothing或其它自定义的有意义的值。 ②空字符串(零长度字符串)

只出现在字符串类型(如nvarchar)的字段中,SQL server中表示为' ',显示为空白,手工在SQL server企业管理器中输入时清空一个单元格即可。它在.NET中对应System.String.Empty,也就是我们常用的\。在T-SQL命令中处理空字符串和处理一般的字符串没什么区别。用ADO.NET从数据库得到的空字符串也和一般的字符串没什么区别。

相关的概念还有VB.NET中的Nothing和对应于C#.NET中的null(注意这个null是C#.NET中的null而非SQL Server中null),它们在.NET中是表示不引用任何对象的空引用的值,在传入SQL server时,根据不同的上下文环境,可能存为真正的空值(比如在更新一个字符串类型的字段值时),也可能调用在SQL server中自定义的默认值(比如传给一个有默认值的存储过程参数),也可能因为无法进行类型转换而引发.NET异常。因此在用ADO.NET向SQL server中存储数据时,大家一定要小心使用Nothing。 ③举例应用:如何检索到数据库中的空值和null 数据库中没有的值分为这么几种:

(1)NULL 如果看上去单元格是空白的,那就是NULL值。

(2) 0 偶尔一些单元格会默认为'0',这个0可能是char也可能是int,所以分0,'0'(即单引号+0)。

(3)null 此null非彼NULL,这个null是'null'(即单引号+null).本人就遇到过一次,在代码中,所有为空的值都用null填充,本意是填充为NULL,结果最后都成了'null',就是四个字母组成的字符串。

)

要将以上三条都检索出来,可以用下面的句子,即使你不是3点全符合也可以用,反正不漏掉一个就好。

23.常见的聚集函数有哪些?(计算 count(数目), sum(和),avg(均值), max(最大值)和

min(最小值)的

函数。聚合函数对一组值执行计算并返回单一的值。除 COUNT 函数之外,聚合函数忽略空值。聚合函数经常与 Select 语句的 GROUP BY 子句一同使用。

所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

仅在下列项中聚合函数允许作为表达式使用: Select 语句的选择列表(子查询或外部查询)。 COMPUTE 或 COMPUTE BY 子句。 HAVING 子句。

Transact-SQL 编程语言提供下列聚合函数: AVG MAX

BINARY_CHECKSUM MIN CHECKSUM SUM CHECKSUM_AGG STDEV COUNT STDEVP COUNT_BIG VAR GROUPING VARP

)

24.解释ACID的具体含义。

ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。原子性 :整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。一致性 :在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。隔离性 :两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。持久性 :在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新 以及修改的资料一次操作完毕,但实际上并不可行。目前主要有两种方式实现ACID:第一种是Write ahead logging,也就是日志式的方式。第二种是Shadow paging。

25.视图的作用是什么?(视图是根据子模式设计的关系,它是由一个或几个基本表(或已定义的视图)

导出的虚表。视图能够简化用户的操作;视图机制可以使用户以不同的方式看待同一数据;视图对数据库的重构提供了一定程度的逻

辑独立性;视图可以对机密的数据提供安全保护。)

1简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

2安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:

使用权限可被限制在基表的行的子集上。 使用权限可被限制在基表的列的子集上。 使用权限可被限制在基表的行和列的子集上。 使用权限可被限制在多个基表的连接所限定的行上。 使用权限可被限制在基表中的数据的统计汇总上。

使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。 3逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。

26.常见的完整性约束有哪些?

完整性约束条件是指数据库中的数据应该满足的语义约束条件。可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。

静态列级约束是对一个列的取值域的说明,包括以下几个方面: ( l )对数据类型的约束(2)对数据格式的约束(3)对取值范围或取值集(白度)合的约束(4)对空值的约束(5)其他约束。

静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。

常见的静态关系约束有:(l)实体完整性约束(2)参照完整性约束(3)函数依赖约束。

动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面(l)修改列定义时的约束(2)修改列值时的约束。 动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。 动态关系约束是加在关系变化前后状态上的限制条件。

联系有三种常见的多重性,即多对多、多对一和一对一,它们的含义是什么?

举个例子:

你有3个表

学生表(学生id 学生姓名) 课程表(课程id 课程名) 成绩表 (学生id 课程id 分数) 班级表(班级id 学生id)

这里的班级表跟学生表就是一对多 一个班级包含了很多学生 反过来就是多对一 这里的课程表就是多对多 一门课对应多个学生选择 一个学生也可以有多个课程可以选 至于一对一的话 教授与学生的关系 一般一个教授就对应一个学生

27.实体-联系图主要构件包括哪些?(9个)

28.如何将ER图转换成关系模式?

ER模型转换关系数据库的 一般规则:

(1) 将每一个实体类型转换成一个关系模式,实体的属性为关系模式的属性。 (2) 对于二元联系,按各种情况处理,如下面所示。

M:N例题比如,ER图如下:

可以转换成以下模式:

学生(学号,姓名,性别,年龄) 主键为学号

课程(课程号,课程名,任课教师) 主键为课程号

选课(学号,课程号,成绩)

主键为课程号、学号,外键为课程号,学号;

1:N例题

比如,ER图如下:

可转换为如下关系模式:

商店模式(商店编号,店名,店址,店经理) 主键为商店编号

商品模式(商品编号,商品名,单价,产地,商店编号,月销售量) 主键为商品编号,外键为商店编号

职工模式(职工编号,职工名,性别,工资,商店编号,开始时间) 主键为职工编号,外键为商店编号

29.什么是BCNF?

BCNF是由Boyce和Codd提出的,比3NF又进了一步,通常认为是修正的第三范式.

所谓第三范式,定义是关系模式R中若不存在这样的码X,属性组Y及非主属性Z,使得X—>Y,Y—>Z成立,(不存在Y—>X),则称R为3NF.

即当2NF消除了非主属性对码的传递函数依赖,则称为3NF。

对3NF关系进行投影,将消除原关系中主属性对码的部分与传递依赖,得到一组BCNF关系。 BCNF定义,关系模式中,若X函数确定Y且Y不在X内时X必含有码,则此关系属于BCNF。 具有函数依赖集F的关系模式R属于BCNF的条件是,对所有F的闭包中形如 X->Y,下面至少有一个成立: 1X->Y是平凡的依赖。 2X是R的一个超码。

一个满足BCNF的关系模式有:

1 所有非主属性对每一个码都是完全函数依赖;

2 所有的主属性对每一个不包含它的码,也是完全函数依赖; 3 没有任何属性完全函数依赖于非码的任何一组属性。

由于R∈BCNF,按定义排除了任何属性对码的传递依赖与部分依赖,所以R∈3NF。但是若R∈3NF,则R未必属于BCNF。 例如:关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一个教师只教一门课。每门课有 若干个教师,某一学生选定某门课,就对应一个固定的教师。由语义可得到如下函数依赖: (S,J)->T;(S,T)->j;T->J。 (S,J),(S,T)都是候选码。

STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖。但STJ不是BCNF关系,因为T是决定因素而T不包含码。

包括课堂上所讲授的主要内容。(第1章引言,第2章关系数据库,第3章SQL,第6章数据库设计与ER模型)

二、设计部分

1. 考虑下面的关系数据库,主码加了下划线。给出关系代数表达式来表示下列 每个查询: branch (branch_name, branch_city, assets) customer (customer_name, customer_street, customer_city) account (account_number, branch_name, balance) loan (loan_number, branch_name, amount) depositor (customer_name, account_number) borrower (customer_name, loan_number) 1)Find all loans of over $900.

2)Find the loan number for each loan of an amount greater than $1200. 3)Find the names of all customers who have a loan, an account, or both, from the bank. 4)Find the names of all customers who have a loan at the Perryridge branch.

5)Find the names of all customers who have a loan at the Perryridge branch but do not have an account at any branch of the bank.

6)Find the names of all customers who have a loan and an account at bank. 7)Find the name of all customers who have a loan at the bank and the loan amount.

8). Find all customers who have an account from at least the “Downtown” and the Uptown” branches找到

所有客户帐户从至少“市中心”和住宅区的树枝

9)Find all customers who have an account at all branches located in Brooklyn city.

解:(1)?amout>900 (loan)

(2)?loan_number (?amout>1200 (loan)) (3) ?customer_name (depositor)

??customer_name (borrower)

(4) ?customer_name (?branch_name=Perryridge (loan?borrower))备注:?为连接,在word中没找到那个符号

(5) ?customer_name

,所以在此处用?代替,下面都是这样。 (?branch_name=Perryridge

(loan?borrower))- ?customer_name

(?branch_name=Perryridge (loan?accout))

(6) ?customer_name (depositor)??customer_name (borrower) (7) ?customer_name, amount(loan?borrower) (8)不懂那句英文什么意思,纠结!

(9) ?branch_city=Brooklyn (customer × depositor)

2.(实践习题3.1)考虑图3-11定义的保险公司数据库,其中加下线线的是主码。对这个关系数据库写出如下的SQL查询语句:

1)找出1989年其车辆出过交通事故的人员总数。

2)向数据库中增加一个新的事故,对每个必需的属性可以设定任意值。 3)删除“John smith”的马自达车(Mazda)。

4)(习题3.8)找出和John smith的车有关的交通事故数量。

5)(习题3.8)对事故报告编号为“AR2197”的且车牌是AABB2000的车辆损坏保险费用更新到3000美元。

--------------------------------------------------------------------------------------- Person(driver_id, name, address) Car(license, model, year) Accident(report_number, data, location) Owns(driver_id, license) License(driver_id, license, report_number, damage_amount) 图3-11 保险公司数据库

解:(1)SELECT COUNT (*) FROM License,Accident

WHERE License.report_name=Accident. report_name AND Accident.date=1989

(2)INSERT

INTO Accident(report_number, data, location) VALUES (1,2,3) (3)DELETE

FROM Car

WHERE model=Mazda AND license=(SELECT license FROM Person,Owns WHERE Person.driver_id= License.driver_id AND Person.name=’John smith’) (4) SELECT COUNT (*) FROM Person,License

WHERE Person.driver_id= License.driver_id AND Person.name=’John smith’ (5)UPDATE License

SET damage_amount=3000

WHERE report_number=’AR2179’ AND License=’AABB2000’

3.(实践习题3.2)考虑图3-12的雇员数据库,其中加下划线的是主码。为下面每个查询语句写出SQL表达式:

1)找出所有为First Bank Corporation工作的雇员名字和居住城市。

2)找出所有为First Bank Corporation工作且薪金超过1万美元的雇员名字、居住街道和城市。 3)找出所有不为First Bank Corporation工作的雇员。

4)找出数据库中工资比Small Bank Corporation的每个雇员都高的所有雇员。

5)假设一个公司可以在好几个城市有分部。找出位于Small Bank Corporation所有所在城市的所有公司。

6)找出雇员最多的公司。

7)找出平均工资高于First Bank Corporation平均工资的所有公司。 ------------------------------------------------------------------------------------------ Employee(employee_name, street, city) Works(employee_name, company_name, salary) Company(company_name, city) Manages(employee_name, manager_name) 图3-12 雇员数据库

解:(1) SELECT employee_name ,city

FROM Employee, Works

WHERE Employee.employee_name=Works.employee_name AND Works.company_name=Fist Bank Cooporation

(2) SELECT employee_name ,city,street

FROM Employee, Works

WHERE Employee.employee_name=Works.employee_name AND

Works.company_name=Fist Bank Cooporation AND salary>10000

(3) SELECT employee_name

FROM Works

WHERE Works.company_name!=Fist Bank Cooporation

(4) SELECT employee_name

FROM Works

WHERE salary > ( SELECT MAX(salary)

FROM Works

WHERE Works.company_name=Small Bank Cooporation)

(5) SELECT company_name FROM Company

WHERE city=( SELECT city FROM Company

WHERE Works.company_name=Small Bank Cooporation)

(6) SELECT company_name FROM Works

WHERE MAX( COUNT (employee_name)) GROUP BY company_name (7) SELECT company_name FROM Works

WHERE AUG (salary)> (SELECT AUG (salary) FROM Works

WHERE Works.company_name=Fist Bank Cooporation)

GROUP BY company_name

4.(实践习题6.1)为车辆保险公司设计一个E-R图。每个客户有一辆或多辆车。每辆车可以关联0次或任意多次事故的记录。并构造合适的关系表。

5.(实践习题6.2)大学的注册办公室维护关于以下实体的数据: (a)课程,包括编号、名称、学分、课程提纲和选修条件;

(b)课程提供,包括课程编号、年、学期、节数、教师(可能多个)、时间和教室; (c)学生,包括学生标识、名字和计划(program); (d)教师,包括标识号、名字、系和职称。

此外,学生课程和登记和学生所选的每门课程的成绩评定都要适当地建模。(进行ER模型的设计,并构造合适的关系表。)

6.(实践习题6.3)考虑一个用于记录学生各门课程考试成绩的数据库。 (a) 构造一个将考试建模成实体的E-R图,为以上的数据库设计一个三元联系。

(b) 构造另一个E-R图,其中只用二元联系来连接sutdents和course_offerings。要求特定“学生和课程”对之间只有一个联系,而且可以表示出学生在一门课程的不同考试中的成绩。

7.图书借阅关系数据库如下:

图书 (图书号,书名,作者,单价,库存量) 读者 (读者号,姓名,工作单位,地址) 借阅 (图书号,读者号,借期,还期,备注) 其中,还期为NULL表示该书未还。

1)用SQL语句查询未还图书的读者姓名和单位。 2)用SQL语句查询“马林”所借图书中未还的书名。 3)用SQL语句查询书名为“高等数学”的库存量。 4)解释以下SQL语句的含义: SELECT 姓名 FROM 读者 解:

(1) SELECT 姓名,工作单位

FROM 读者,借阅

WHERE 读者.读者号=借阅.读者号 AND 还期=NULL

(2) SELECT 书名

FROM 读者,图书,借阅

WHERE 图书.图书号=借阅.图书号 AND 读者.读者号=借阅.读者号 AND 还期

=NULL AND 姓名=‘马林’

(3)SELECT 库存量 FROM 图书

WHERE 书名=‘高等数学’

(4)查询借阅了图书号为‘001’的图书的读者。

8.设某商业集团数据库中有商店、商品、职工三类实体。其中商店的属性有:商店编号、商店名称、地址;商品的属性有:商品号、商品名、规格、单价;职工的属性有:职工号、姓名、性别。 每个商店可销售多种商品,每种商品也可放在多个商店销售。 每个商店聘用多名职工,每名职工只能在一个商店工作。 根据上面叙述,解答以下问题: 1)设计E—R模型。

2)将E—R模型转换成关系模型,标出每一个关系的主键码。 解:(1)ER图如图所示。

(2)这个ER图可转换4个关系模式: 商店(商店编号,商店名,地址)

职工(职工编号,姓名,性别,业绩,商店编号,聘期,月薪) 商店(商品号,商品名,规格,单价)

销售(商店编号,商品号,月销售量)(商品编号,商品号为外键)

WHERE 读者号 IN

(SELECT 读者号 FROM 借阅 WHERE 图书号=’’001’’)

本文来源:https://www.bwwdw.com/article/yza2.html

Top