数据库原理及应用(第3版) - 全部习题new

图3.2 关系数据库三级模式结构示意图

视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。

存储文件的物理结构及存储方式等组成了关系数据库的内模式。对于不同数据库管理系统,其存储文件的物理结构及存储方式等往往是不同的,一般也是不公开的。

视图和基本表是SQL语言的主要操作对象,用户可以用SQL语言对视图和基本表进行各种操作。在用户眼中,视图和基本表都是关系表,而存储文件对用户是透明的。

关系数据库三级模式结构直观示意图如图3.2所示。

3、解释本章所涉及的有关基本概念的定义:基本表、导出表、视图、索引、聚集、系统特权、对象特权、角色,并说明视图、索引、聚集、角色的作用。 解:

1)

基本表:基本表是本身独立存在的表,在SQL中一个关系就对应一个表。 导出表:在若基本表上定义的查询表。

视图:视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。 索引:在现实生活中我们经常借用索引的手段实现快速查找,例如图书目录、词典索引等。同样道理,数据库中的索引是为了加速对表中元组(或记录)的检索而创建的一种分散

+

存储结构(如B树数据结构),它实际上是记录的关键字与其相应地址的对应表。索引是对表或视图而建立的,由索引页面组成。

聚集:按照索引记录的存放位置可分为聚集索引与非聚集索引两类。聚集索引是指索引项的顺序与表中记录的物理顺序一致的索引组织;非聚集索引按照索引的字段排列记录,但是排列的结果并不会与表记录顺序一致,而是另外组织存储。在检索记录时,聚集索引会比非聚集索引速度快,一个表中只能有一个聚集索引,而非聚集索引可以有多个。

系统特权:即系统权限,是指数据库系统级的权限,而不是依附于某数据库对象的权限。如创建数据库表的权限:CREATE TABLE。

对象特权:数据库管理员拥有系统权限,而作为数据库的普通用户,只对自己建的基本表、视图等数据库对象拥有对象权限。所谓对象权限即是指依附于数据库对象如表、视图等

41

数据库原理及应用 的权限。如对某表的添加记录、删除记录、修改记录、查询记录等的权限。

角色:角色是对多种权限的集合的一种命名。当要为某一用户同时授予或收回多项权限时,则可以把这些权限定义为一个角色,如此可对此角色内的所有权限进行整体操作。这样就避免了许多重复性的工作,简化了管理数据库用户权限的人的工作。可以把角色授予用户或其它角色。

2)以下简单说明视图、索引、聚集、角色的作用。

视图:在关系数据库系统中,视图为用户提供了多种看待数据库数据的方法与途径,是关系数据库系统中的一种重要对象。其作用有:(1)视图能够简化用户的操作;(2)视图使用户能以多种角度看待同一数据;(3)增加了数据的安全性;(4)视图对重构数据库提供了一定程度的逻辑独立性。

索引:系统将自动使用索引进行查询优化,能明显加快对表数据的查询速度。

聚集:聚集是一种数据组织方法,聚集索引是一类索引,由于索引信息与表记录的物理组织存放顺序一致,从而能减少定位索引信息的时间,能更快速地索引查找记录数据。

角色:简化了数据库系统管理对权限的管理工作。 4、在对数据库进行操作的过程中,设置视图机制有什么优点?它与数据表之间有什么区别? 解:

1)在关系数据库系统中,视图为用户提供了多种看待数据库数据的方法与途径,是关系数据库系统中的一种重要对象。其优点有:(1)视图能够简化用户的操作;(2)视图使用户能以多种角度看待同一数据;(3)增加了数据的安全性;(4)视图对重构数据库提供了一定程度的逻辑独立性。

2)视图在概念上与基本表等同,一经定义,就可以和基本表一样被查询、被删除,我们也可以在一个视图上再定义新的视图,但对视图的更新(插入、删除、修改)操作相对于数据表来说,则有一定的限制。即有些视图逻辑上是肯定不能修改的。

5、设有四个关系(只示意性给出一条记录):

S SPJ

SNO SNAME ADDRESS TEL SNO PNO JNO QTY Sl SN1 上海南京路 68564345 S1 Pl J1 200

P J

PNO PNAME SPEC CITY COLOR JNO JNAME LEADER BG P1 PNl 8X8 无锡 红 J1 JN1 王总 10

S(SNO,SNAME, ADDRESS,TEL)其中,SNO:供应商代码 SNAME:姓名 ADDRESS:地址 TEL:电话;

J(JNO,JNAME,LEADER,BG)其中,JNO:工程代码 JNAME:工程名 LEADER:负责人 BG:预算;

P(PNO,PNAME,SPEC,CITY,COLOR)其中,PNO:零件代码 PNAME:零件名 SPEC:规格 CITY:产地 COLOR:颜色;

SPJ(SNO,JNO,PNO,QTY)其中,SNO:供应商代码 JNO:工程代码 PNO:零件代码 QTY:数量;

(1)为每个关系建立相应的表结构,添加若干记录。 (2)完成如下查询:

1)找出所有供应商的姓名和地址、电话。

42

2)找出所有零件的名称、规格、产地。

3)找出使用供应商代码为S1供应零件的工程号。

4)找出工程代码为J2的工程使用的所有零件名称、数量。 5)找出产地为上海的所有零件代码和规格。 6)找出使用上海产的零件的工程名称。 7)找出没有使用天津产的零件的工程号。 8)求没有使用天津产的红色零件的工程号。 9)取出为工程J1和J2提供零件的供应商代号。 10)找出使用供应商S2供应的全部零件的工程号。 (3)完成如下更新操作:

1)把全部红色零件的颜色改成蓝色;

2)由S10供给J4的零件P6改为由S8供应,请作必要的修改。

3)从供应商关系中删除S2的记录,并从供应零件关系中删除相应的记录。 4)请将 (S2, J8, P4, 200) 插入供应零件关系。 5)将工程J2的预算改为40万元。 6)删除工程J8订购的S4的零件。

(4)请将“零件”和“供应零件”关系的连接定义一个视图,完成下列查询: 1)找出工程代码为J2的工程使用的所有零件名称、数量。 2)找出使用上海产的零件的工程号。 解: (1)

CREATE TABLE S(SNO VARCHAR(5) NOT NULL PRIMARY KEY, SNAME VARCHAR(20) NOT NULL, ADDRESS NVARCHAR(30), TEL VARCHAR(20))

INSERT INTO S VALUES(?S1?,?SN1?,? 上海南京路?,?68564345?) ……

CREATE TABLE P(PNO VARCHAR(5) NOT NULL PRIMARY KEY, PNAME VARCHAR(20) NOT NULL, SPEC VARCHAR(20), CITY NVARCHAR(20); COLOR NVARCHAR(2))

INSERT INTO P VALUES(?P1?,?PN1?,?8x8?,?无锡?,?红?) ……

CREATE TABLE J(JNO VARCHAR(5) NOT NULL PRIMARY KEY, JNAME VARCHAR(20) NOT NULL, LEADER VARCHAR(10), BG INT)

INSERT INTO J VALUES(?J1?,?JN1?,?王总?,10) ……

CREATE TABLE SPJ(SNO VARCHAR(5) NOT NULL, PNO VARCHAR(5) NOT NULL, JNO VARCHAR(5) NOT NULL, QTY INT,

43

数据库原理及应用 CONSTRAINT PR_SPJ PRIMARY KEY(SNO,SPNO,JNO))

INSERT INTO SPJ VALUES(?S1?,?P1?,?J1?,200) …… (2)

1)找出所有供应商的姓名和地址、电话。 SELECT SNAME,ADDRESS,TEL FROM S 2)找出所有零件的名称、规格、产地。 SELECT ONAME,SPEC,CITY FROM P

3)找出使用供应商代码为S1供应零件的工程号。 SELECT DISTINCT JNO FROM SPJ WHERE SNO=’S1’

4)找出工程代码为J2的工程使用的所有零件名称、数量。 SELECT PNAME,QTY FROM SPJ,P

WHERE SPJ.PNO=P.PNO AND JNO=’J2’

5)找出产地为上海的所有零件代码和规格。 SELECT PNO,SPEC FROM P WHERE CITY=’上海’ 6)找出使用上海产的零件的工程名称。 SELECT JNO FROM FROM P,SPJ,J

WHERE P.CITY=’上海’AND P.PNO=SPJ.PNO AND SPJ.JNO=J.JNO 7)找出没有使用天津产的零件的工程号。 SELECT JNO FROM J

WHERE JNO NOT IN

(SELECT JNO FROM SPJ,P

WHERE SPJ.PNO=P.PNO AND P.CITY=’天津’)

8)求没有使用天津产的红色零件的工程号。 SELECT JNO FROM J

WHERE JNO NOT IN

(SELECT JNO FROM SPJ,P

WHERE SPJ.PNO=P.PNO AND P.CITY=’天津’ AND P.COLOR=’红’)

9)取出为工程J1和J2提供零件的供应商代号。 SELECT SNO FROM SPJ

WHERE JNO=’J1’ OR JNO=’J2’

10)找出使用供应商S2供应的全部零件的工程号。 SELECT JNO FROM J

WHERE NOT EXISTS (SELECT * FROM SPJ X

44

联系客服:779662525#qq.com(#替换为@)