1.1.4.SSPARC三级模式体系结构。 ANSI/SPARC提出将数据库系统分为三种层次
一、从数据库管理系统的角度看,可分为三层,从外到内依次为外模式、模式和内模式。
1、 外模式:
外模式又称为用户模式:是数据库用户和数据库系统的接口,是数据库用
户的数据视图(View),是数据库用户可以看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。 2、 模式:
模式是所有数据库用户的公共数据视图,是数据库中全部数据的逻辑结构和特征的描述。 3、 内模式:
内模式又称为存储模式(Storage Schema),是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。
二、为了实现三个抽象级别的联系和转换,数据库管理系统在三层结构之间提供了“两
层映像”:外模式/模式映像和模式/内模式映像。 1、外模式/模式映像
通过外模式与模式之间的映像把描述局部逻辑结构的外模式与描述全局逻辑结构的模式联系起来。 2、模式/内模式映像
通过模式与内模式之间的映像把描述全局逻辑结构的模式与描述物理结构的内模式联系起来。
1.1.5.设计OID的数据结构时应考虑哪些问题。 OID对象标识
对象标识在编程语言中已经存在很长时间了,在数据库概念中还是刚刚被提及(1989)。他的概念如下:在一个拥有对象标识的模型中,一个对象的存在并不依赖于他的值。对象标识不应该依赖于它所代表的对象的值。而“对象相等”的概念反映了对象标识与对象的值之间的关系。有两种对象相等的意见存在,一种是两个对象是同一个,即是一个对象那么它的对象标识就是同一个对象标识。还有一种是指两个对象相等,指他们的值相等而对象标识不等。这有两个含义,一个是对象共享,还有一个是对象更新。 对象共享:在一个基于标识的模型中,两个对象可以共享一个部件。这样,复杂对象的图形化表示是一个图,而在一个没有标识的模型中,限制成一个树。考虑下面的例子:一个人有姓名、一个年龄、一个孩子的集合。假设Peter和Susan都有一个15岁的孩子,叫john。在实际生活中,会有两种情况,一是Peter和Susan是同一个孩子的父母,或者是有二个孩子,在没有标识的模型中,Peter表示成:
(Peter, 40, {(John, 15, {})}) Susan表示成
(Susan, 41, {(John, 15, {})})
这样,没有方法表示是否Peter和Susan是同一个孩子的父母。在一个基于标识的模型,那两个结构是否共享同一个部分(John, 15, {})。
对象更新:假设Peter和Susan确实是John的父母,在这种情况下,所有对于Susan孩子的更新操作也会影响到Peter的孩子。在一个基于值的系统,这两个子对象必须都要更新。对象标识同时也是强大的数据操纵的基本要素,可以时集合、元组的基础和递归的复杂对象操纵。
支持对象标识意味着提供对象赋值功能、对象拷贝(深拷贝和浅拷贝)、对象标识检测和对象比较等(深相等和浅相等)。 当然,用户可以在基于值的系统上,显式给定对象标识来模拟。然而,这种方式会给用户确保对象标识的唯一性和参照完整性上增加负担,特别是类似于垃圾回收的操作。
要注意的是对象标识在编程语言中是必须的,程序中操纵的每个对象都有一个标识可以被更新。这个标识有时是一个变量名,有时也是物理内存中的一个地址。但是在纯关系型模型中,是没有这一概念的,因为它是一个基于值的模型。
1.2. 某个大学中有若干系,且每个系有若干个班级和教研室,每个教研室有若干个教员,其中教授、副教授,每个人带领若干名研究生。每个班有若干名学生,每个学生可选修若干门课程,每门课程可由若干学生选修。完成下列各种要求:
(1) 设计一个概念模式以描述上述情况,画出E-R图。要求补充每个实体的适当属性
DepartmentDnoMust create a tableClassCnoStarff RoomSRnoStudentSnoTeacherMust create a tableTnoMust create a tableCourseCno(2)将“E-R图”转换为关系模式
答:系(系号,系名)= Dept(Dno,Dname) 班级(班级号,班级名)= Class(Cno,Cname)
教研室(教研室号,教研室名,系号)= StaffRoom(SRno,SRname,Dno) 学生(学生号,学生名,班级号)= Student(Sno,Sname,Cno) 课程(课程号,课程名)= Course(Cono,Coname) 教员(教员号,教员名,职位,工资号,系号)=Teacher(Tno,Tname,Position,WageNo, Dname)
选课(课程号,学号)= SelectCouse(Cono,Sno) //多对多的关系必须建立一个表。 班系(班级号,系号)= ClassDept(Cono,Dno)//一对多的关系可建立也可不建立看情况。
选导师(学号,教员号)=SelectTeacher(Sno,Tno) //一对多的关系可建立也可不建立看情况。在本题需要建立。
(3)使用SQL语言来完成下列查询
(a) 查找计算机系的,“学号”为981001的学生选修的课程名称和课程号。 SELECT Cono,Coname FROM Course WHERE EXIST ( SELECT *
FROM SelectCouse
WHERE Sno = “981001”
)
(b) 求没有带研究生的所有教授或副教授的名称、工资号及所在的系名。 SELECT Tname, WageNo,Dname FROM Teacher
WHERE Teacher. Position:professor or vice-professor AND NOT EXIST
(SELECT *
FROM SelectTeacher )
(c) 至少有一个班级的系的名称。 SELECT Dname FROM Dept WHERE EXSIT (SELECT * FROM ClassDept
)
1.3. 下面是某学院的一个学生档案数据库的全局模式:
Student={sno,sname,sex,birth,major,class,dno} Grade={sno,cno,grade}
其中sno,sname,sex,birth为学生的“学号”,姓名,性别和出生日期,major,class,dno为专业,班级和所属的“系号”。全学院共有8个系,dno分别为1,2,…8。其中cno为课程号,grade为考试成绩。根据需要,要求将学生关系Student中的{sno,class }保存在场地0,其他属性和成绩Grade按“系号”1-4,5-6分别保存在场地1和场地2上。根据上述要求,
1.3.1.将全局模式进行分片,写出分片定义和分片条件。 分片定义和分片条件
Stu = Student?Grade
sno=sno
Student1=ПTemp=ПStudent2=?Student3=?sno,classStu
Stu Temp Temp
sname,sex,birth,major,dno1??dno??45??dno??6Site Student1(0), Student2(1), Student3(2); 1.3.2.指出各分片的类型,并画出“分片树”。 Student1=ПStudent2=?Student3=?sno,class,sname1??dno??45??dno??6Student是垂直分片
Temp是水平分片 Temp是水平分片
Stu(sno,sname,sex,birth,major,class,dno,cno,grade)(V)
Student1(sno,class,sname)(0) temp(sname,sex,birth,major,dno,cno,grade)(H) Student2(sname,sex,birth,major,dno,cno,grade)(1) Student3(sname,sex,birth,major,dno,cno,grade)(2)
1<=dno<=4
5<=dno<=6
1.3.3.假设要求查询“系号”是1的所有学生的姓名和成绩,写出在全局模式上的SQL查询语句,并要求转换成相应的关系代数表示,画出全局查询树,请依次进行全局优化和分片优化,画出优化后的查询树。要求给出优化变换过程。
SELECT * FROM Stu
WHERE dno = “1”
?dno?1Stu
Student1 Temp
Student2 Student3
去掉Student3如图
П
sname,grade
| δdno?\1\
| ? sname?sname