三级数据库新增题库1
数据完整性保护是指保护数据的正确性和一致性。有下列关键字:
Ⅰ.GRANT
Ⅱ.CHECK
Ⅲ.UNIQUE
Ⅳ.NOT NULL
上述关键字中和完整性定义相关的是()。
A) 仅Ⅰ和Ⅱ
B) 仅Ⅰ、Ⅱ和Ⅲ
C) 仅Ⅰ、Ⅱ和Ⅳ
D) 仅Ⅱ、Ⅲ和Ⅳ
在一个ER 图中,包含三个实体集,分别是员工、部门和项目;员工内部存在一对多的领导联系,员工和部门之间存在一对一的管理联系,员工和部门之间存在多对一的属于联系,员工和项目之间存在多对多的参与联系,部门和项目之间存在一对多的负责联系,则将该ER 图转化为关系模型后,得到的关系模式个数是()。
A) 4个
B) 5个
C) 6个
D) 7个
从功能角度数据库应用系统可以划分为四个层次,其中负责向表示层直接传送数据的是()。
A) 表示层
B) 业务逻辑层
C) 数据访问层
D) 数据持久层
在需求分析阶段规定好不同用户所允许访问的视图,这属于数据库应用系统的()。
A) 功能需求分析
B) 性能需求分析
C) 存储需求分析
D) 安全需求分析
安全性保护是防止用户对数据库的非法使用。现有下列措施:
Ⅰ.用户身份鉴别
Ⅱ.权限控制
Ⅲ.视图机制
Ⅳ.双机热备
上述措施中和安全性保护相关的是()。
A) 仅Ⅰ和Ⅱ B) 仅Ⅰ、Ⅱ和Ⅲ C) 仅Ⅰ、Ⅱ和Ⅳ D) 全部都是
已知有关系:学生(学号,姓名,性别,年龄),对该关系有如下查询操作: SELECT 学号 FROM 学生
WHERE 性别 = '男' AND 年龄 != 25
ORDER BY 姓名
为了加快其查询速度,则应该()。
A) 在学号上建索引
B) 在姓名上建索引
C) 在性别上建索引
D) 在年龄上建索引
如果一个基本表的数据量很小,查询以整表扫描为主,并且会频繁执行更新操作,则存储该表的最佳文件结构是()。
A) 散列文件
B) 堆文件
C) 顺序文件
D) 聚集文件
在数据库系统运行过程中,并发事务可能导致死锁。下面是一些实现事务的做法: Ⅰ.按相同顺序访问资源
Ⅱ.减少事务中的用户交互
Ⅲ.合并多个小事务
Ⅳ.尽量使用表级锁
Ⅴ.使用绑定连接
在以上做法中,能有效减少数据库死锁发生数量的是()。
A) 仅Ⅰ、Ⅱ和Ⅲ
B) 仅Ⅰ、Ⅱ和Ⅴ
C) 仅Ⅱ、Ⅲ和Ⅳ
D) 仅Ⅲ、Ⅳ和Ⅴ
在数据库应用系统建模过程中,经常采用UML 作为建模工具。关于UML 的动态建模机制,下列说法错误的是()。
A) 类图是展现一组类、接口和协作以及它们之间的关系的一种静态视图
B) 协作图是交互图的一种,其中包含一组对象、对象之间的联系以及对象间发送和接收的消息
C) 状态图主要用来描述一个实体在发生一些事件时的状态变化情况,用于展示该实体处于不同状态时对不同事件做出响应后的状态变化情况
D) 顺序图主要用于描述系统、用例和程序模块中逻辑流程的先后执行次序或并行次序
在SQL Server 2008中,设有职工表(职工号,姓名,所在部门,工资),各列均不允许空值。现要查询人数最多的3个部门,有下列查询语句:
Ⅰ.SELECT TOP 3 所在部门, COUNT(*) FROM 职工表
GROUP BY 所在部门
ORDER BY COUNT(*) DESC
Ⅱ.SELECT TOP 3 所在部门, COUNT(职工号) FROM职工表
GROUP BY 所在部门
ORDER BY COUNT(职工号) DESC
Ⅲ.SELECT TOP 3 所在部门, COUNT(所在部门) FROM职工表
GROUP BY 所在部门
ORDER BY COUNT(所在部门) DESC
Ⅳ.SELECT TOP 3 所在部门, SUM(职工号) FROM职工表
GROUP BY 所在部门
ORDER BY SUM(职工号) DESC
上述语句中,能够实现该查询要求的是()。
A) 仅Ⅰ
B) 仅Ⅳ
C) 仅Ⅰ和Ⅱ
D) 仅Ⅰ、Ⅱ和Ⅲ
下列关于SQL Server 2008触发器的说法,错误的是 ()。
A) 触发器可用于实现复杂的业务规则
B) 使用触发器实现数据完整性的效率通常低于CHECK 约束
C) 在同一个表的同一个操作上可以建立多个后触发型触发器
D) 当前触发型触发器执行时,引发触发器执行的操作语句已执行完毕
【解析】前触发型触发器是在引发该触发器执行的操作语句执行之前激活的触发器,而后触发器就是在语句执行之后激活的触发器。
在SQL Server 2008中,设有职工表(职工号,姓名,所在部门,工资),现要建立查询指定部门的最高工资的标量函数。下列语句中正确的是()。
A) CREATE FUNCTION dbo.f_AvgSalary(@dept varchar(20))
RETURNS INT AS
BEGIN
RETURN(SELECT MAX(工资) FROM 职工表 WHERE 所在部门 = @dept)
END
B) CREATE FUNCTION dbo.f_AvgSalary(@dept varchar(20))
RETURNS INT AS
BEGIN
DECLARE @x INT
SET @x = SELECT MAX(工资) FROM 职工表 WHERE 所在部门 = @dept
RETURN (@x)
END
C) CREATE FUNCTION dbo.f_AvgSalary(@dept varchar(20))
RETURNS INT AS
BEGIN
RETURN(SELECT MAX(工资) FROM 职工表 WHERE 所在部门 = @dept
GROUP BY 所在部门)
END
D) CREATE FUNCTION dbo.f_AvgSalary(@dept varchar(20))
RETURNS INT AS
BEGIN
DECLARE @x INT
SET @x = SELECT MAX(工资) FROM 职工表 WHERE 所在部门 = @dept
GROUP BY 所在部门
RETURN (@x)
END
下列关于SQL Server 2008数据库文件的说法,错误的是 ()。
A) 一个数据库可以包含多个主要数据文件
B) 一个数据文件不能属于多个文件组
C) 日志文件不能包含在文件组中
D) 一个数据库可以包含多个日志文件
【解析】每个数据库有且仅有一个主要数据文件,可以有多个次要数据文件。 下列关于SQL Server 2008中分离和附加数据库的说法,错误的是()。
A) 在分离数据库之前,必须先断开所有用户与该数据库的连接
B) 分离数据库只分离数据文件,不会分离日志文件
C) 附加数据库时文件存储位置可以与分离数据库时文件所处的存储位置不同
D) 进行分离数据库操作时不能停止SQL Server服务
下列关于SQL Server 2008分区表的说法,错误的是()。
A) 分区表是从物理上将一个表划分为若干个分区
B) 分区后的各分区必须存储在不同的文件组中
C) 表中数据量的大小并不是是否需要进行分区的唯一考虑因素
D) 对表进行分区后,用户在访问数据时不需要知道被访问数据所在的分区
【解析】分区表的本质是把符合不同标准的数据子集存储在某个数据库的一个或多个文件组中,通过元数据来表述数据存储的逻辑地址。
下列关于数据库存取控制的说法,错误的是()。
A) 自主存取控制主要通过GRANT 、REVOKE 、DENY 语句来实现
B) 在强制存取控制中,DBMS 将实体划分为主体和客体两大类
C) 仅当主体的许可级别大于客体的密级时,主体才能读取相应的客体
D) 强制存取控制本质上是分层次的,它比自主存取控制更严格
【解析】数据库强制存取控制方法的规则是:仅当主体的许可证级别大于或等于客体的密级时,主体才能读取相应的客体;仅当主体的许可证级别等于客体的密级时,主体才能写相应的客体。
在SQL Server 2008某数据库中,设用户U1是db_ddladmin角色中的成员。下列关于U1在该数据库中具有的权限的说法,正确的是()。
A) 对所有用户表仅具有增、删、改、查数据的权限
B) 对所有用户表仅具有增、删、改、查数据及创建表的权限
C) 具有执行全部数据定义语句的权限
D) 仅具有创建数据库的权限
完成数据库应用系统的设计并进行实施后,数据库系统进入运行维护阶段。下列工作中不属于数据库运行维护工作的是()。
A) 恢复数据库数据以核查问题
B) 为了保证安全,定期修改数据库用户的密码
C) 更换数据库服务器以提高应用系统运行速度
D) 使用开发人员提供的SQL 语句初始化数据库中的表
数据库管理员应该定期对数据库进行重组,以保证数据库性能。下列有关数据库重
组工作的说法,错误的是()。
A) 重组工作中可能会对数据库数据的磁盘分区方法和存储空间进行调整
B) 重组工作一般会修改数据库的内模式和模式,一般不改变数据库外模式
C) 重组工作一般在数据库运行一段时间后进行,不应频繁进行数据库重组
D) 重组工作中应尤其注意频繁修改数据的表,因为这些表很容易出现存储碎片,导致效率下降
【解析】数据库的重组并不修改原设计的逻辑和物理结构,而数据库的重构则要部分的修改数据库的模式和内模式。
索引是数据库中重要的数据结构,关于索引现有下列说法:
Ⅰ.在某个查询中带排序的属性有多个时可以考虑在这些属性上建立复合索引 Ⅱ.一个表中最多只能有一个主索引或聚集索引
Ⅲ.多属性索引中,索引属性的顺序一般按照属性的长度进行排列
Ⅳ.在频繁更新的属性上建立索引可能导致系统开销过大
Ⅴ.B 树索引一般适用于等值和范围查询,散列索引一般适用于范围查询 以上说法正确的是()。
A) 仅Ⅰ、Ⅱ和Ⅳ
B) 仅Ⅳ和Ⅴ
C) 仅Ⅱ、Ⅲ和Ⅳ
D) 仅Ⅰ、Ⅱ、Ⅲ和Ⅳ
【解析】①在多属性索引中,索引属性的顺序是按照其区分度进行排序。②散列索引根据HASH 算法构建索引,所以检索速度很快,但不能用于范围查询。
某应用系统需使用运行于两个地点的分布式数据库,该应用系统经常需要进行某一查询操作,此查询需要对两个分布在两地数据量很大的表进行连接操作。这两张数据变化很慢。为了提高查询速度,下列方法中最可行的是()。
A) 使用表水平分割方法,将两张表分别分割为多张表
B) 将两张表复制交叉复制到两地
C) 增加网络带宽,提高数据传输速度
D) 增加数据库内存,缓冲更多的数据
检查点能减少数据库完全恢复时所必须执行的日志,提高数据库恢复速度。下列有关检查点的说法,错误的是()。
A) 检查点记录的内容包括建立检查点时正在执行的事务清单和这些事务最近一个日志记录的地址
B) 在检查点建立的同时,数据库管理系统会将当前数据缓冲区中的所有数据记录写入数据库中
C) 数据库管理员应定时手动建立检查点,保证数据库系统出现故障时可以快速恢复数据库数据
D) 使用检查点进行恢复时需要从" 重新开始文件" 中找到最后一个检查点记录在日志文件中的地址
【解析】检查点应当由数据库恢复子系统自动的定期或者不定期的建立,而不应当由数据库管理员手动建立。
为了保证数据库系统稳定运行,需要使用服务器容错技术保证其运行服务器的可靠
性。下列有关Active-Standby 模式服务器容错技术的说法,错误的是()。
A) 此模式需要两台服务器使用共享的存储设备,数据库中数据需要存储在此设备中
B) 此模式需要在两台服务器之间建立专用的状态检测网络
C) 此模式中增加串口方式检测服务器状态可以有助于避免" 脑裂" 现象出现
D) 此模式的优点是两台服务器切换速度快,数据库连接不中断,应用不受影响 SQL Server 2008提供了三种恢复模式,不同的恢复模式决定了数据库支持的备份类型和还原方案。下列有关其恢复模式的说法,错误的是()。
A) 简单恢复模式不记录事务日志,如果数据库损坏,简单恢复模式可能造成数据丢失
B) 完整恢复模式记录所有的事务日志,同时事务日志记录保留到对其备份完毕为止
C) 大容量日志恢复模式只对大容量操作进行最小记录,使事务日志不会被大容量加载操作所填充
D) 大容量日志恢复模式不支持时点恢复,但可以支持还原单个数据页
SQL Server 2008支持多种数据库还原级别。下列有关其数据库恢复的说法,错误的是()。
A) 在进行数据库整体还原和恢复过程中,此数据库处于脱机状态
B) SQL Server支持对数据库的一个数据文件进行还原,在还原过程中此文件处于脱机状态,数据库中的其他文件不受影响
C) 在还原数据库之前,如果数据库的日志没有损坏,为了减少数据丢失可以进行一次尾部日志备份
D) 在进行数据库还原的过程中可以将数据库移动到其他位置
【解析】SQL Server支持对数据库中的一个数据文件进行还原的操作,在还原过程中数据库自动处于脱机状态,其它的都将文件不能进行读写操作,因此将受到一定的影响。
关于分布式数据库的数据分布策略,下列说法错误的是()。
A) 集中式数据分配就是将所有数据片断安排在一个场地上
B) 分割式数据分配是所有全局数据有且只有一份,它们被分割成若干片断,每个片断被分配在一个场地上
C) 全复制式数据分配是全局数据有多个副本,每个场地上有一个完整的数据副本
D) 混合式数据分配是一种介于集中式和全复制式的分布方式
【解析】混合式数据分配是一种介于分割式和全复制式的分布方式。
一个在线书评、乐评分享网站,建有面向业务的数据库系统和面向分析的数据仓库系统,数据仓库系统需要每天从数据库应用系统的数据库导入新数据。有下列数据表:
Ⅰ.书籍表和书籍类别表
Ⅱ.用户表和好友关系表
Ⅲ.书评表和乐评表
Ⅳ.音乐专辑表和音乐分类表
上述表中,适合采用快照方式从数据库应用系统获取数据的是()。
A) 仅Ⅰ和Ⅳ
B) 仅Ⅱ和Ⅳ
C) 仅Ⅰ、Ⅱ和Ⅳ
D) 仅Ⅰ、Ⅱ和Ⅲ
【解析】快照:该方法通过对当前数据表进行" 照相" ,记录当前的数据表信息" 相片" ,然后将当前的" 相片" 与以前的数据表" 相片" 进行比较,如果不一致将通过一定的方式传到数据仓库,从而实现数据的一致性,这种方式适合于更新频率较低的数据表。
某电子商务平台为实现精准营销,提高向用户推荐商品的成功率,欲建立数据仓库系统,作为数据挖掘程序的数据源。假设业务型数据主要存放于销售数据表T1中,用户信息存放于用户表T2中。数据仓库将近5年的销售细节数据存放在数据表T3中,并在数据仓库中根据需要存放一些汇总数据。为达到这些要求,有如下一些方案: Ⅰ.T3与T1实时更新,即每产生一条销售记录,同时写到T1和T3中,并触发数据挖掘程序运行,以增加数据挖掘结果的准确性
Ⅱ.用户每次产生新的销售记录,触发数据挖掘程序执行并得到针对该用户的推荐商品列表,然后写回T2中。T3每天定时从T1进行批量更新
Ⅲ.T3与T1实时更新,每天定时运行数据挖掘程序,将运行结果,也就是针对用户的推荐商品列表写回数据仓库的用户商品推荐表中
Ⅳ.T3每天做一次批量更新,并在数据仓库中生成相应的汇总数据,数据挖掘程序以细节数据或汇总数据作为数据源,将运行结果即针对用户的推荐商品列表写回数据仓库的用户商品推荐表中
上述方案中不合理的是()。
A) 仅Ⅰ和Ⅳ
B) 仅Ⅱ和Ⅳ
C) 仅Ⅰ、Ⅱ和Ⅳ
D) 仅Ⅰ、Ⅱ和Ⅲ
下列关于数据仓库粒度的说法,错误的是()。
A) 在数据仓库环境中,粒度是一个重要的设计问题,它影响到数据仓库的数据量和系统能够回答的查询的类型
B) 一般在进行数据仓库的数据组织时,需要根据当前应用的需求来进行多粒度级设计
C) 粒度越小,数据量越小,空间代价越小
D) 粒度越大,综合程度越高
【解析】粒度越小,则详细程度越高,综合程度就越低,回答询问的种类也越多,数据量比较大,空间代价也大;粒度越大,综合程度就越高。
在常见的分布式数据库参考模式结构中,存在多种分布透明性。关于分布透明性,下列说法错误的是()。
A) 分片透明性是最高级别的透明性,位于全局概念模式与分片模式之间
B) 位置透明性使用户编写程序时只需要考虑数据分片情况,不需要了解各分片在各个场地的分配情况
C) 局部数据模型透明性位于分配模式与局部概念模式之间
D) 局部数据模型透明性使用户在编写应用程序时不需要了解全局数据的分片情况,但是需要了解各场地上数据库的数据模型
每TPS 代价值是用于衡量系统性价比的指标。
DFD 方法由四种基本元素构成,它们是数据流、处理、数据存储和外部项。
UML 中的活动图的主要作用是陈述活动与活动之间流程控制的转移,其作用类似于流程图,然而与流程图不同的是其支持并行行为。
设有学生表(学号,姓名,所在系)和选课表(学号,课程号,成绩),现要利用开窗函数查询每个学生的姓名、所在系及选课门数(不包括没选课的学生)。请补全下列语句:
SELECT DISTINCT 姓名, 所在系
选课门数 FROM 学生表 T1 JOIN 选课表 T2 ON T1.学号
= T2.学号
设在SQL Server 2008某数据库中有购买表(顾客号,商品号,购买时间),现要查询
C02顾客购买过但C01顾客没有购买过的商品。请补全下列语句。
FROM 购买表 WHERE
顾客号 = 'C02'
FROM 购买表 WHERE 顾客号 = 'C01';
(EXCERT )
在游标中相对于当前行向下第
5行数据的语句是
… (RELATIVE )
fun1的T-SQL 语句是
… (ALTER FUNCTION)
在SQL Server 2008中,在T 表的c1列上定义唯一非聚集索引(索引名为idx1)的SQL 语句是 (UNIQUE NONCLUSTERED)
中,具有全部用户表数据的增、删、改权限的数据库角色是
(db_datawriter)
(时间)
设SQL Server 2008中有students 数据库,需要对其进行事务日志备份,直接备份到D:\LogData目录下(此目录已存在)的Students_log.bak文件上,请补全下列语句:
(LOG)
出)
(导
(逻辑)
发现数据库中数据间的关联性的。(关联规则)
已知有如下关系模式:
T1(a1,a2, a3, a5),T2(a3,a4),T3(a5, a6),T4(a3, a5, a7),其中带下划线的属性标识为所在关系模式的主码,T1中的a3是参照T2的外码,T1中的a5已知有如下关系模式:
T1(a1,a2, a3, a5),T2(a3,a4),T3(a5, a6),T4(a3, a5, a7),其中带下划线的属性标识为所在关系模式的主码,T1中的a3是参照T2的外码,T1中的a5是参照T3的外码,T4中的a3是参照T2的外码,T4中的a5是参照T3的外码。
请将上述关系模式用适当的ER 图表示出来,并用下划线标注出作为实体主码的属性。
【解析思路】
ER图向关系模式转换涉及到两方面:①实体的转换;②实体间联系的转换。
实体的转换:在从ER 图转换为关系模式时,一个实体就转换成一个关系模式,实体的属性就是关系模式的属性,实体的键就是关系的主键。
实体间联系的转换:实体间存在三种联系, 即1:1(一对一),1:m(一对多),m:n(多对多)。
在从ER 向关系模式转换规则如下:
•1:1(一对一)联系
方法一:联系转换为独立的关系模式;模式的属性由联系本身的属性及两个实体的键构成;主键由两个实体中的任意一个键构成。
方法二:联系与一端的实体的关系模式合并,即将联系的属性加入到实体的关系模式内,主键不变。
•1:m(一对多)联系
方法一:联系转换为独立的关系模式;模式的属性由联系本身的属性及两个实体的键构成;主键由n 端实体的键组成。
方法二:与n 端的实体的关系模式合并,即将联系的属性加入到实体的关系模式内,主键不变。
•m:n(多对多)联系
多对多联系转换成新的独立的模式时,模式的属性由联系本身的属性及两个实体的键构成,主键由两端实体的键组合而成。
该题的解题过程是ER 图向关系模式转换过程的反向推算。
由于T4中的a3, a5分别是T2和T3的主码,根据m:n(多对多)联系转换规则知道,T2模式代表的实体(假设实体名为t2)和T3模式代表的实体(假设实体名为t3) 之间存在m:n(多对多)联系(假设联系名为t4),且a7是联系的属性。由于a4和a6没有在T4中,因此可以推论出a4和a6不是联系的属性,而是实体t2和实体t3的属性。 由于关系模式T1中的a3, a5分别是T2和T3的主码,a1、a2不属于T2、T3、T4,因此可以推断a2不是实体T2、T3和T4的属性。只能是另外一个实体(假设实体t1)的属性。而t2和t1之间存在1:m 关系,t2和t1之间存在1:m 关系
【参考答案】
设在SQL Server2008某数据库中有商品表和销售表,两个表的定义如下: CREATE TABLE 商品表(
商品号 char(10) PRIMARY KEY,
商品名 varchar(40),
类别 varchar(20),
进货单价 int );
CREATETABLE 销售表(
商品号 char(10) REFERENCES 商品表(商品号),
销售时间 datetime,
销售数量 int,
销售单价 int,
PRIMARYKEY(商品号, 销售时间) );
现要创建一个存储过程:查询指定类别的每种商品当前年销售总金额(销售总金额=销售单价* 销售数量)。请补全下列代码。
CREATEPROC p_TotalProfit
@lb varchar(20)
AS
SELECT 商品名
销售表 t1
FROM 商品表
【解题思路】
①整个select 语句的含义是:根据where 子句的条件表达式,从From 子句指定的基本表或视图中找出满足条件的元组,再按select 子句中的目标列表达式,选出元组中的属性值形成结果表。
②该题中(SELECT FROM 销售表 t1 WHERE and = year(Getdate()))是个嵌套,别名叫做销售总金额。
③语句执行过程:
•先从商品表中按照第二个where 形成一个初步查询结果。由于只有商品表中有类别,因此可知第四空填写:t2. 类别=@lb(t2是商品表的别名,t1是销售表的别名) 。由此可知该步是按给定类别查询。
•销售总金额语句就应该在第一部的基础上求某年的总额。因此可以推断第三空是获得销售时间语句。因此该空填写t1. 销售时间。由于是在第一步基础上的查询,所以应该实行连表查询,第二空应该填写连接的条件,即t1. 商品号=t2.商品号。
•第一空应该是求总额的语句。销售总金额=销售单价* 销售数量,即销售单价*SUM(销售数量) 。
【参考答案】
【第1空】销售单价*SUM(销售数量)
【第2空】t1. 商品号=t2.商品号
【第3空】t1. 销售时间
【第4空】t2. 类别=@lb
设某超市经营管理系统使用SQL Server 2008数据库管理系统,此数据库服务器有2颗CPU 、16GB 内存、2TB 磁盘。上线运行1年后,用户在生成每天每个销售人员及每个收银台的总销售额报表时速度缓慢。经技术人员分析,发现速度缓慢的原因为销售单据表和销售单据明细表数据量合计已经达到60GB 。已知这两个表结构如下: 销售单据表(销售单据编号,销售时间,销售人员编号,收银台编号) 销售单据明细表(销售单据编号,商品编号,单价,数量)
在进行此报表计算时数据库服务器CPU 消耗非常高。为了优化此操作,某工程师建议在销售单据表中增加" 付款总金额" 属性,取值由触发器自动计算。请从磁盘空间使用、销售操作时对数据库服务器的影响、数据一致性以及对总销售额计算速度影响方面分析此方案优劣。请判断此方案是否可行,并从时空代价和优化效果方面分析原因。
【解题思路】
在数据库设计阶段,主要强调的是高效率利用存储空间,减少数据的冗余,减少数据的不
一致性,这个过程也就是规范化的过程。但是在数据库运行阶段要考虑到高效率的进行数据处理。
完全规划化的数据库会产生很多表,对于一个频繁使用的查询,如果它要求操作多个相关表中的数据,则每次为生成需要的查询结果而在连接多个表中相关行时,数据库管理系统就会消耗更多的计算资源,因为连接操作非常耗时。
而反规范化是将规范化的关系转换为非规范化的关系的过程,目的是提高查询的效率。常见的方法有增加派生冗余列,增加冗余列,重新组表,分割表和新增汇总表等方法。
该题解决的方式就是增加派生冗余列--" 付款总金额" 。派生性冗余列是指表中增加的列由表中的一些数据项经过计算而成,它的作用是查询时减少连接操作,避免使用聚合函数。例如销售单据明细表(销售单据编号,商品编号,单价,数量)中增加" 付款总金额" ,因为付款总金额=单价*数量得到,说明" 付款总金额" 是派生性冗余列。如果不要该字段,那么每次使用总价时,都要先执行代码计算后才能使用,如果商品数量较多,而且要频繁使用" 付款总金额" 时,计算" 付款总金额" 时执行的次数也会随着增加,这显然会影响数据库的执行效率。若增加" 付款总金额" 这个派生性冗余字段,虽然破坏了规范化原则,但只要执行一次计算" 付款总金额" 就可以把商品金额存在数据库中,以后不管什么时候使用" 付款总金额" 字段,只需要提取其值就可以了,不必在执行代码了。因此增加" 付款总金额" ,虽然提高了磁盘空间的使用,但是可以提高系统执行的效率,达到以空间换时间的目的。
由此可以看出,在数据单据表中增加" 付款总金额" 不是正确的优化方法,应该在数据单据明细表中增加" 付款总金额" ,这样才能提高查询效率。
【参考答案】
此方案不可行。触发器可以通过数据库中的相关表进行层叠更改,这比直接把代码写在前台的做法更安全合理,保证了数据的一致性,但同时增加了磁盘空间的消耗。在超市经营中要批量操作、多次触发的情况下,触发器的效率低,因为它相当于每次都执行一段SQL 语句,使cpu 的消耗更高。因而从时空代价角度来说并不能达到优化的效果,故该方案不可行。