【问题1】 根据上述说明,由SQL定义的“职工”和“部门”的关系模式,以及统计各部门的人数C、工资总数Totals、平均工资Averages的D_S视图如下所示,请在空缺处填入正确的内容。 Create Table 部门 (部门号 Char(1){{U}} (a) {{/U}} 部门名 Char(16), 负责人代码 Char(4), 任职时间 DATE, {{U}}(b) {{/U}} (职工号)); Create Table 职工 (职工号 Char(4), 姓名 Char(8), 年龄 NUMDER(3), 月工资 NUMDER(4), 部门号 Char(1), 电话 Char(8), 办公室 Char(8), {{U}}(a) {{/U}}(职工号), {{U}}(c) {{/U}}(部门号), CHECK({{U}} (d) {{/U}})); Create View D_S(D,C,Totals,Averages) As (Select 部门号,{{U}} (e) {{/U}} from 职工 {{U}} (f) {{/U}} |
【问题2】 对于表22-2、表22-3所示的“职工”和“部门”关系,请指出下列各行是否可以插入,为什么? ![]() 【正确答案】
【答案解析】(1)不能插入。它违反了实体完整性原则,因为其主键属性值已经存在。
(2)可以插入。尽管部门号、电话和办公室为空,但是它表示该职工暂时还没有分配到某个部门。
(3)不能插入。它违反了参照完整性。因为6在关系“部门”中不存在。
本题主要考查完整性定义的约束性。
先看看第一条记录,它的职工号是1001,在表22-2中已经存在该职工号的记录。因为“职工号”是“职工”关系的主键,它在表中不能重复出现,否则破坏了实体的完整性。因此该条记录不能插入。
在第二条记录中职工号没有重复,同时它可以先不录入部门号(表示是新职工,暂时还没有分配部门),因为在“职工”关系中“部门号”是外键,在定义中也没有约束它不能为空。因此该记录可以插入。
最后一条记录中,部门号是6,但是在“部门”关系中没有找到“部门号”是6的记录,因此不能做插入操作。否则,就违反了参照完整性规则。
问答题
【正确答案】
【答案解析】(1)和(2)都不能执行,因为使用分组和聚集函数定义的视图是不可更新的。
(3)不一定能执行,具体要看视图的返回值的情况。
(4)和(5)可以执行,因为给出的SQL语句与定义D_S视图的SQL语句合并起来验证有效。
做这种类型的题目时,只要把题目给出的SQL语句与定义该视图的SQL语句合并起来验证是否有效即可。在问题1的分析中,我们已经求出了定义该视图的SQL语句如下:
Create View D_S(D,C,Totals,Averages)AS (Select 部门号,Count (职工号), SUN (月工资),AVG (月工资) From 职工 Group by 部门号)
(1)合并结果为:Update职工Set部门号=3 Where 部门号 =4 Group by 部门号。因为Where中不能包括Group聚合函数,因此不能执行。
(2)合并结果为:Delete From 职工Where Count(职工号)>4 Group by 部门号,因此也不能执行。
(3)这种要看视图的返回值的情况。因此不一定能执行。
(4)可以。
(5)显然该语句能执行。
问答题
【正确答案】
【答案解析】(1)对于外层的“职工”关系E中的每一个元组,都要对内层的整个“职工”关系M进行检索,因此查询效率不高。
(2)本题可以有两种解法:
解答一:
改正后的SQL语句使用了临时表:
Select Max(月工资)as 最高工资,部门号Into Temp From 职工
Group by 部门号
Select 职工号 From 职工,Temp
Where 月工资=最高工资 And 职工.部门号=Temp.部门号;
解答二:
Select 职工号 From 职工,(Select Max(月工资) As 最高工资,部门号
Group by 部门号 As depMax
Where 月工资=最高工资 And 职工.部门号=depMax.部门号;
因为该SQL语句用了查询嵌套和聚集函数,所以这种方式的查询效率会受到很大的影响。可以把它改成:
Select Max(月工资)As maxgz,部门号Into Temp From 职工
Group by 部门号
Select 职工号 From 职工,Temp
Where 月工资=maxgz And 职工.部门号=Temp.部门号;
问答题
【正确答案】
【答案解析】Select 姓名,年龄,月工资 From 职工
Where 年龄>45
UNION
Select 姓名,年龄,月工资 From 职工
Where 月工资<1000;
因为该SQL语句用了查询嵌套和聚集函数,所以这种方式的查询效率会受到很大的影响。可以把它改成:
Select Max(月工资)As maxgz,部门号Into Temp From 职工
Group by 部门号
Select 职工号 From 职工,Temp
Where 月工资=maxgz And 职工.部门号=Temp.部门号;
在语句
Select 姓名,年龄。月工资 From 职工
Where 年龄>45 or 月工资<1000;
中,由于使用了条件“Or”,查询的时候变成了对全表的扫描,不会促使查询优化器使用索引,从而降低了查询效率。改正的方法是去掉“Or”,修改后的SQL语句如下:
Select 姓名,年龄,月工资 From 职工
Where 年龄>45
UNION
Select 姓名,年龄,月工资 From 职工
Where 月工资<1000;
问答题
![]() 【正确答案】
【答案解析】见图22-6。
[试题2分析]
这是道关于数据库设计方面的试题,主要考查考生在数据库设计中的概念结构设计与逻辑结构设计方面的知识。
所谓概念结构设计,就是将需求分析得到的用户需求抽象为信息结构,它是整个数据库设计的关键。在这个过程中有个很重要的环节,就是设计E-R图。
在概念设计阶段中,数据抽象是对实际的人,物,事和概念进行人为处理,抽取所关心的共同特性。有三种抽象形式,分别是分类,聚集和概括。其中概括是定义类型之间的一种子集联系,其重要性质是继承性。也就是说子类继承了超类上定义的所有抽象。
例如学生是实体型,本科生,研究生也是实体型,本科生和研究生是学生的子集。则学生称为超类,本科生和研究生称为学生的子类。本科生和研究生继承了学生类型的属性。当然,子类可以增加自己的某些特殊属性。
概念结构设计是独立于任何一种数据模型的信息结构。而逻辑结构设计的任务是把概念结构设计阶段设计奸的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。
[问题1]
解答此类题目的关键是要能理解题目中处理的信息,以及它们之间的关系。在题目中告诉了我们,将经销的商品分为直销商品和库存商品两大类。因此在E-R图中商品是超类,而直销商品和库存商品是子类。而且在E-R图中销售详单、销售日汇总、存货表和进货表中的商品编号属性都必须能在商品表中找到。即它们与商品的关系分别是 N:I、N:I、1:1和N:I。因此,E-R图如图22-6所示。
![]()
问答题
【正确答案】
【答案解析】商品(商品编码,商品名称,供应商,价格)
直销商品(商品编码,生产批号,消费期限)
库存商品(商品编码,折扣率)
根据问题1的分析,同时从图22-1,图22-2和图22-3可以看出,商品包括了商品编码,商品名称和价格属性。
商品(商品编码,商品名称,供应商,价格)
因为直销商品还加上生产批号,消费期限,因此,直销商品的关系模式是:
直销商品(商品编码,生产批号,消费期限)
题目中该系统对库存商品会不定期按照折扣率进行打折优惠。因此可以看出,库存商品还有价格折扣率这个字段,即可知道库存商品的关系模式是:
库存商品(商品编码,价格折扣率)
问答题
【正确答案】
【答案解析】销售详单({{U}}销售流水号,商品编号{{/U}},数量,金额,收银员,时间)
销售日汇总({{U}}日期,商品编码{{/U}},数量)
存货表({{U}}商品编码{{/U}},数量)
进货表({{U}}送货号码,商品编码{{/U}},数量,日期)
商品({{U}}商品编码{{/U}},商品名称,供应商,价格)
直销商品({{U}}商品编码,生产批号{{/U}},消费期限)
库存商品({{U}}商品编号{{/U}},折扣率)
这是一道关于确定关系模式中的主键的问题。此种类型的题目比较简单,只要对题意有大致的了解,就可以很容易地解答。通过图22-1可以知道,销售详单中通过销售流水号和商品编号就可以确定其他属性值了。销售日汇总表是通过从每个工作日结束前汇总当日各商品的销售量情况得来的,很显然,在销售日汇总关系中只有(日期,商品编号)才能唯一决定记录,因此(日期,商品编号)是主键。存货表记录每种商品的库存数量,它的主键是商品编号。从图22-2和图22-3可以知道,有了送货号码和商品编号就可以确定某条记录的其他信息,如:数量,日期等。
问答题
【正确答案】
【答案解析】第一种方式:采用商品信息集中存储在中心数据库中的方式,则在销售前台的每笔计费中,都必须从中心数据库提取商品名称和单价,增加网络的负载,在业务繁忙时直接影响到前台的销售效率;同时,如果发生网络故障,则该POS机不能工作。
采用这种方式,如引入新的商品和修改商品价格,会及时体现在前台的销售业务中。因此,更新商品库时,只要更新中心数据库就够了,比较快捷。
第二种方式:采用商品信息存储在中心数据库中的方式,各POS机存储商品表的备份,POS机直接从本地读取商品信息,减少于网络的负载,可以提高交易的效率;同时即使有短时间的网络故障,也不影响该POS机的正常使用,只有当存在商品信息变更时才需要与中心数据库同步。
采用这种方式时,必须在每次商品信息变更时同步各POS机的数据。因此,前台销售访问本机数据,访问速度快,销售效率高。但是在更新商品库时,需要同时更新中心数据库和各POS机备份,速度比较低。
本题涉及数据存储分布的问题,可以通过各种性能分析来决定采用的存储分布缸略。
如果将商品信息只存储在中心数据库中,则POS收银机每处理一个业务都要从中心数据库中存取数据,这样可以保持数据的一致性,在中心计算机可以集中有效地管理,更新商品库时比较方便。但是,前台的POS收银机是通过网络来实现数据的访问的,这会影响数据的访问速度,在一定程度上给前台处理效率带来影响。
若采用在各个POS机上存储数据库的备份,这样POS机访问的是本机的数据,速度比较快,前台的销售效率高。但是,在更新商品库的同时没有保证整体数据的一致性和有效性。比如:该超市某天进了一些新的商品,放在柜台上,同时在当天有客户购买这种商品,准备在前台付款,但是前台的POS机通过条码阅读器不能检测到该商品。原因很简单,因为POS机访问的是本机上的数据,这个数据是在录入新商品之前从中心计算机的数据库备份下来的。这样就出现了超市有新来的商品但当天又不能出售的现象。另外一种情况是,如果某POS机出售了一个商品,则必须更新所有POS机的备份,否则数据也会不一致。
问答题
![]() 【正确答案】
【答案解析】对销售详单做如下的修改,增加积分卡号属性:
销售详单({{U}}销售流水号,商品编码{{/U}},数量,金额,收银员,时间,
![]() |