第1章引言1.1说明物理数据独立性与逻辑数据独立性的区别。答:在某个层次上修改数据库的模式定义而不影响位于其上层模式的能力叫做数据独立性。有两个层次的数据独立性:物理数据独立性与逻辑数据独立性物理数据独立性:是指修改数据库的物理模式而不必重写应用程序的能力;逻辑数据独立性:是指修改数据库的逻辑模式而不必重写应用程序的能力;区别:由定义可知:他们位于数据库系统的不同的层次。物理数据独立性:为了提高性能,偶尔在物理层做一些修改,通过物理数据独立性的特性尽量不影响逻辑层,从而达到不必重写应用程序的能力。逻辑数据独立性:只要数据库的逻辑结构发生了变化,逻辑层就必须要做一些修改,通过逻辑数据独立性,保持视图抽象层的不变,从而达到不必重写应用程序的能力。1.2数据库管理员的主要作用是什么?答:DBA:一个特殊的用户,负责对DBMS进行集中的管理与控制,它就是数据库管理员--DBA--DatabaseAdministrator;DBA的职责包括:决定数据库中的信息内容和结构;决定数据库的存储结构和存取策略;定义数据的安全性和完整性约束;监控数据库的使用和运行;数据库的性能改进、重组和重构,以提高系统的性能。1.3举例说明数据库模式和实例间的区别。答:数据库中的数据会随时发生变化,特定时刻存储在数据库中的信息集合称作数据库的一个实例。而数据库的总体设计,即数据库的样子,称作数据库模式,按照抽象层次的不同,可分为物理模式、逻辑模式和子模式。例如:若要存储学生的信息,首先要对存储学生的信息即属性(如:学号、姓名、性别、年龄等)进行抽象,并对属性进行物理层和逻辑层的描述,而实例仅仅是一个具体学生的信息(例如:20050808111,张三、男,1980.10.13),其存储等各种操作按照数据库模式的描述进行。1.4举例说明数据3层抽象间的区别。答:数据库管理系统通过如下三个层次的抽象来向用户屏蔽复杂性,简化系统的用户界面:物理层抽象、逻辑层抽象和视图层抽象。物理层抽象:最低层次的抽象,描述数据是如何存储的。它描述复杂的底层数据结构,是学者和开发DBMS的供应商研究的事情;逻辑层抽象:比物理层稍高层次的抽象,描述数据库中存储什么数据以及这些数据间存在什么关系。数据库管理员和数据库应用开发人员必须确定数据库中应该保存哪些信息;视图层抽象:也叫概念层,是最高层次的抽象,但它只描述整个数据库的一小部分,系统可以为同一数据库提供多个视图。例如:存储学生Student和老师Teacher的信息,其中Student包含Stu_number和Stu_name,Teacher包含Teach_no和Teach_name和Teach_age。在物理层,Student和Teacher等记录可能被描述为由连续的存储位置组成的存储块。数据库管理系统为数据库程序设计人员屏蔽了许多低层的存储细节。在逻辑层,数据库管理员或程序设计人民在这个抽象层次上工作。例如Student(Stu_number,Stu_name)Teacher(Teach_no,Teach_name,Teach_age)在视图层,数据库管理系统定义了数据库的多个视图,数据库用户看到的是这些视图。除了屏蔽数据库的逻辑层细节外,视图还提供了防止用户访问数据库某些部分的安全机制。例如用户只能看到教师的Teach_no和Teach_name,而不能看见Teach_age。第2章实体-联系模型2.1主码、侯选码和超码之间有什么区别?答:超码是一个或多个属性的集合,这些属性的组合可以使我们在一个实体集中唯一地标识每个实体。通常我们只关心这样的超码:它们的任意真子集都不能成为超码,这样的最小超码称为候选码;对一个实体集来说,它的候选码不是唯一的。主码是被数据库设计者选中的,用来在同一实体集中区分不同实体的侯选码;区别:(1)从定义可知,超码是一个属性的集合,可以唯一的标识每个实体,属性集可能有冗余属性;(2)侯选码是包含属性最少超码,即属性集中没有冗余属性。侯选码不唯一。(3)主码是从侯选码集合中被数据库设计者选中的,用来识别实体的侯选码。2.2为交通管理局的车辆管理设计了一个E-R图。交通管理局管理很多车主,每个车主有一辆或多辆机动车。每辆机动车可能发生了0次或任意多次交通事故。答:按要求设计出如下E-R图:2.3将习题2.2的E-R图转换成表的形式。owner(owner_number,owner_name,owner_sex,owner_birthday,owner_address)owner_car(owner_number,car_number,purchasing_date,car_price)car(car_number,car_type,manufactured_date,car_make)accident(accident_number,car_number,accident_date,accident_desc)2.4强实体集和弱实体集之间有什么差别?答:其属性可形成主码的实体集称为强实体集;所有属性都不足以形成主码的实体集称为弱实体集。差别:(1).强实体集和弱实体集存在依赖密切相关:强实体集的成员必然是支配实体;而弱实体集的成员只能是从属实体。(2).弱实体集只有在参与多对一的联系集时才有意义,该联系集应该不具有任何属性。2.5根据讲课内容,给出学校有关学生、课程、教师和院系之间的E-R图。答:根据讲课内容将上面实体之间的关系画到一起,可得到如下E-R图:第3章关系模型3.1关系和关系模式有什么区别?答:在数学上将关系定义为一系列域上的笛卡尔积的子集。所谓数据库模式就是数据库在逻辑层的总体设计,一般简称模式;针对关系模型来说,数据库模式就是关系模式。形象的说,关系模式的概念和程序设计语言中“数据类型”的概念类似;关系的概念和程序设计语言中数据类型的“变量”的概念类似。如图3-1所示。3.2列出在数据库中引入空值的两个原因。答:空值null是所有可能域的成员,表示“值未知或不存在”。因此引入空值的原因一:值未知;原因二:表示值不存在。3.3为什么要在数据库中定义视图?答:基于以下三点原因,希望用户和编程人员工作在视图层上:1.出于安全上的考虑,不希望用户看到整个数据库的逻辑模式,而要隐藏掉部分数据;2.希望产生比逻辑模式更加符合特定用户习惯的关系集合,也就是人们常说的个性化服务;3.如果应用程序基于视图层的视图,就更容易实现逻辑数据独立性!3.4使用下面的关系代数表达式表示所有与Smith居住在同一城市同一街道的客户姓名。))))((((,customercustomerSmithnamecitystreetSmithnamename图3-1关系模型与程序设计言中数据类型的类比3.5基于本章讲到的关系模式和关系,用关系代数表达式表示上课地点在三教的那些课程的开课教师所在系的名称。答:题目所求的关系代数表达式为:)))(((___courseteachingteacherlikelocationcoursenumberteachernamedepartment三教3.6基于本章讲到的关系模式和关系,用自然语言连接表示以下查询:找出所有既有教师讲授又有学生选修的课程名称。答:所求自然连接表达式为:)(_teachingselectingnamecourse3.7设r(R)和s(S)是两个关系,并且S是R的子集,那么有))())((()(,rsrrsrSSRSRSRSR请分析此表达式的正确性。答:此表达式正确。分析如下:首先:关系sr,r(R)和s(S)之间的关系可用下图表示。其次:在表达式))())((()(,rsrrsrSSRSRSRSR中,表达式了rrSSR)(,,因此))())(((,rsrSSRSRSR可化简为)))(((rsrSRSR。由sr和上图可以得出如下形式化描述:定理1:不妨设关系s中有n个元组sit(ni1),若)(srt,对stsi,则有rtttsiri:(ni1),反之亦然。…t…tr1:t+ts1tr2:t+ts2tr3:t+ts3ts1ts2ts3rssrsrSR)(:表示对r中任一个元组rt,记tSRtr][,则有))((srtttSRsirsi:(ni1)。因此若r中存在形如rtttsiri:(ni1)的n个元组,则由表达式)))(((rsrSRSR就可以保证在其结果中不存在元组t,因此必定有)))())((()((,rsrrtSSRSRSRSR。反之若某个rtttsiri:(ni1),则在结果)))(((rsrSRSR中必定包含元组t,从而在结果))())((()(,rsrrSSRSRSRSR中不包含元组t。题目表达式左部满足定理1描述,因此表达式成立,即描述正确。附:本章所讲到的关系模式有:1.Student_schema=(student_number,student_name,department_name)2.Department_schema=(department_name,department_location,department_leader)3.Course_schema=(course_name,course_location,course_capacity)4.Selecting_schema=(student_number,course_name)5.Teacher_schema=(teacher_number,teacher_name,teacher_age,department_name)6.Teaching_schema=(teacher_number,course_name)第4章关系数据库查询语言SQL4.1如下所示是一个保险公司的数据库,其中加下划线的是主码。对这个关系数据库用SQL回答以下问题:Person(ss,name,address)Car(license,year,model)Accident(date,driver,damage)Owns(ss,license)Log(license,date,driver)(1)找出在1989年其车辆出过车祸的车主人数;Selectcount(distinctss)fromowns,log,accidentwherelog.license=owns.licenseandlog.driver=accident.driverandyear(accident.date)=1989(2)找出和JohnSmith的车有关的车祸数量;Selectcount(*)fromperson,owns,license,accidentwhereperson.name=”JohnSmith”andperson.ss=owns.ssandowns.license=log.licenseandlog.driver=accident.driver(3)为数据库添加一个新客户;Insertintopersonvalues(121,“张三”,“北京海淀区101#”)(4)删除JohnSmith的马自达车(Mazda);DeletefromOwnswherelicensein(selectlicensefromperson,owns,carWhereperson.name=”JohnSmith”andperson.ss=owns.ssAndowns.licens=car.licenseandcar.model=”Mazda”)(5)为Jones的丰田车(Toyota)加一条加车祸记录。Insertintoaccident(date,driver,damage)select2007/10/22,log.driver,”车门损坏”fromperson,ow