问答题 [问题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), 年龄 NUMBER(3), 月工资 NUMBER(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}});
【正确答案】
【答案解析】[问题1]解答 (a)PRIMARY KEY (b)FOREIGN KEY (负责人代码) REFERENCES职工 (c)FOREIGN KEY (部门号) REFERENCES部门 (d)月工资>=500 AND<月工资=5000,或月工资 BETWEEN 500 AND 5000 (e)count(*),Sum (月工资),Avg (月工资) (f)GrOup by部门号 [问题1][分析] 根据题意,“职工”和“部门”的关系模式如下: 用SQL定义关系模式的一个非常重要的问题是完整性控制。完整性控制应具有三方面的功能:定义功能、检测功能、处理功能(一旦发现违背了完整性约束条件,采取相关的动作来保证数据的完整性)。数据库中最重要的约束是声明一个或一组属性形成关系的键。键的约束在SQL的CREATETABLE命令中声明。在关系系统中,最重要的完整性约束条件是:实体完整性和参照完整性。 1.实体完整性定义 在关系中只能有一个主键。声明主键有两种方法: ①将PRIMARY KEY保留字加在属性类型之后。 ②在属性列表中引入一个新元素,该元素包含保留字PRIMARYKEY和用圆括号括起的形成该键的属性或属性组列表。 2.参照完整性 参照完整性定义格式如下: FOREIGN KEY(属性名)REFERENCES表名(属性名) [ONDELETE[CASCADE|SETNULL] 参照完整性是通过使用如下保留字:FOREIGN KEY 定义那些列为外码; REFERENCES 指明外键对应于哪个表的主键;ON DELETE CASCADE 指明删除被参照关系的元组时,同时删除参照关系中的元组;SETNULL表示置为空值方式。本试题中,部门关系的主键为部门号,职工关系的主键为职工号。其中,部门关系的主键为部门号可采用如下两种方式定义: 部门号CHAR(1)PRIMARY KEY或者是PRIMARY KEY(部门号) 又因为负责人也是一个职工,所以负责人代码应该是一个外码,应进行参照完整性定义。根据分析部门的SQL定义如下: Create Table 部门(部门号 CHAR(1){{U}} PRIMARY KEY {{/U}}, 部门名 CHAR(16), 负责人代码 CHAR(4), 任职时间 DATE, {{U}}FOREIGN KEY (负责人代码) REFERENCES 职工 {{/U}}(职工号)); 在职工关系中,部门号是一个外码,应进行参照完整性定义。又因为在试题表2-1中的条件“500元≤月工资≤5000元”,所以在职工关系中应加上用户定义完整性。根据 分析职工的SQL定义如下: Create Table 职工 (职工号CHAR(4), 姓名 CHAR(8), 年龄 NUMBER(3), 月工资NUMBER(4), 部门号CHAR(1), 电话 CHAR(8), 办公室CHAR(8), {{U}}PRIMARY DEY {{/U}} (职工号), {{U}}FOREIGNKEY (部门号) REFERENCES 部门{{/U}} (部门号), CHECK({{U}}月工资 BETWEEN 500 AND 5000 {{/U}})); 建立D_S视图需要COUNT函数来统计各部门的人数C,SUM来计算工资总数 Totals,用AVG来计算平均工资Averages,用分组语句GROUPBY来对不同部门进行分组。因此创建D_S视图的SQL语句是: Create ViewD_S (D,C,Totals,Averages)AS (SELECT 部门号,{{U}}COUNT(*),SUM (月工资),AVG(月工资){{/U}} FROM 职工 {{U}}GROUP BY 部门号){{/U}}