1
设要为某工厂设计一个数据库,需要记录如下信息(有下划线的信息可作为唯一标识):
•产品有产品名、规格;
•每种产品拥有多道加工工序,每道加工工序只适用于一种产品;
•每道工序需要记录相关的工序编号、所需材料、加工要求;
•每道工序可以有多道上游工序,每道工序最多有一道下游工序;
•职工有职工名、性别、工资;
•每个职工只负责加工一道工序,每道工序可有多个职工负责加工,需要记录每个职工的加工时间;
根据以上描述,试画出相应的ER图。
将上面的ER图转换为相应的关系模式,并指出各关系模式的主码。
本题考查的是根据需求分析画出ER图,然后再将ER图转换成关系模式。
这类题目的解题思路是:
(1)确定实体及其实体的属性。
(2)确定实体之间的联系,及其联系的属性。
(3)ER图向关系模式转换涉及两方面:①实体的转换;②实体间联系的转换。
实体的转换:在从ER图转换为关系模式时,一个实体转换成一个关系模式,实体的属性就是关系模式的属性,实体的键就是关系的主键。
实体间联系的转换:实体间存在三种联系,即1:1(一对一)联系,1:m(一对多)联系,m:n(多对多)联系。在从ER图向关系模式转换时规则如下:
(1)1:1(一对一)联系
方法一:联系转换为独立的关系模式;模式的属性由联系本身的属性及两个实体的键构成;主键由两个实体中的任意一个键构成。
方法二:联系与一端的实体的关系模式合并,即将联系的属性加入到实体的关系模式内,主键不变。
(2)1:m(一对多)联系
方法一:联系转换为独立的关系模式;模式的属性由联系本身的属性及两个实体的键构成;主键由m端实体的键组成。
方法二:与m端的实体的关系模式合并,即将联系的属性加入到实体的关系模式内,主键不变。
(3)m:n(多对多)联系。转换成新的独立的模式,模式的属性由联系本身的属性及两个实体的键构成,主键由两端实体的键组合而成。
答案:[1]:
[2]:
答案:[1]:销售表
[2]:INSERT
[3]:UPDATE
[4]:SET
[5]:销售总量或商品表.销售总量
[6]:Inserted
【解题思路】
使用FOR或AFTER选顶定义的触发器为后触发器,即只有在引发触发器执行的语句中的操作都已成功执行,并且所有的约束检查也成功完成后,才执行触发器。而使用INSTEAD OF选顶定义的触发器为前触发器。这种模式的触发器中,指定执行触发器而不是执行引发触发器执行的SQL语句,从而替代引发语句的操作。
在触发器语句中可以使用两个特殊的临时工作表:INSERTED表和DELETED表。这两个表是在用户自行数据的更改操作时,SQL Server自动创建和管理的。其中INSERTED表是用于存储INSERT和UPDATE语句所影响的行的副本。而DELETED表用于存储DELETE和UPDATED语句所影响的行的副本。
建立触发器语法是:
CreateTRIGGER trigger_name
ON { table | view }
{
{ { FOR |AFTER | INSTEAD OF } { [ Insert ] [ , ] [ Update ] }
AS
[{ IF Update (column )
[{ AND | or } Update ( column )]
[…n ]
| IF ( COLUMNS_UpdateD ( ) { bitwise_operator } updated_bitmask)
{ comparison_operator } column_bitmask […n ]
}]
sql_statement […n ]
}
}
其中:参数trigger_name是触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须唯一。可以选择是否指定触发器所有者名称。
Table | view是在其上执行触发器的表或视图,有时称为触发器表或触发器视图。可以选择是否指定表或视图的所有者名称。
FOR或AFTER指定触发器只有在触发SQL语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。如果仅指定FOR关键字,则AFTER是默认设置。不能在视图上定义AFTER触发器。
INSTEAD OF指定执行触发器而不是执行触发SQL语句,从而替代触发语句的操作。在表或视图上,每个Insert、Update或Delete语句最多可以定义一个INSTEAD OF触发器。然而,可以在每个具有INSTEAD OF触发器的视图上定义视图。INSTEAD OF触发器不能在WITH CHECK OPTION的可更新视图上定义。如果向指定了WITH CHECK OPTION选顶的可更新视图添加INSTEAD OF触发器,SQL Server将产生一个错误。用户必须用Alter VIEW删除该选顶后才能定义INSTEAD OF触发器。
{[Delete] [,] [Insert] [,][Update] }是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选顶。在触发器定义中允许使用以任意顺序组合的这些关键字。如果指定的选顶多于一个,需用逗号分隔这些选顶。对于INSTEAD OF触发器,不允许在具有ON Delete级联操作引用关系的表上使用Delete选顶。同样,也不允许在具有ON Update级联操作引用关系的表上使用Update选顶。
AS是触发器要执行的操作。
sql_statement是触发器的条件和操作。触发器条件指定其他准则,以确定Delete、Insert或Update语句是否导致执行触发器操作。
从触发器的语法中可知,【1】处应该填写的是执行触发器的表,【2】处应该填写指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。从题目"CPEATE TRIGGER tri_insert on【1】FOR【2】“知,本题创建的触发器是是后触发器。该触发器的功能是"每当在销售表中插入一条销售记录时,修改商品表中对应商品的销售总量”。本题是在销售表上建立后触发器,需要执行的是插入语句。故可推导出【1】处应填写:销售表,【2】处应填写:INSERT。
根据触发器语法规则知,AS是触发器要执行的操作。本题要求的是更新商品表中的销售总量。更新语句釆用UPDATE关键字,其语法格式为:UPDATE 表名 SET语句。因此【3】处应填写:UPDATE,【4】处应填写:SET,【5】处应填写:商品表.销售总量。
本题中,是使用INSERT和UPDATED关键字对商品表进行操作,因此影响的是INSERTED表的内容。故【6】处应填写:Inserted。
答案:
[1]对登录日志表中在登录时间列上以月为单位创建右侧分区函数,将登录日志表分成12个分区,每个分区对应一年中一个月的值。因为操作仅限于查询,建立分区表可以有效的提高查询效率。
[2]釆用方案2。对于CPU、内存、磁盘等硬件设备在空闲时使用率超过90%,说明硬件资源匮乏。如果在高峰时使用率小于90%说明硬件资源充足。本题中,内存和磁盘的使用率都高于90%,而CPU的使用率不高于50%,说明内存、硬盘的资源匮乏,需要调整,而CPU的资源充足不需要调整。因此在硬件调整时,应提高内存的容量和硬盘的访问效率。RAID1相对于RAID0来说提高了读速度,加强了系统的可靠性,但是写效率没有提高。