[问题1]根据上述说明,由SQL定义的“职工”和“部门”的关系模式,以及统计各部门的人数C、工资总数Totals、平均工资Averages的D_S视图如下所示,请在空缺处填入正确的内容。 Create Table 部门 (部门号 CHAR(1) (a) ,部门名 CHAR(16),负责人代码 CHAR(4),任职时间DATE,(b)(职工号)); Create Table职工(职工号 CHAR(4),姓名 CHAR(8),年龄 NUMBER(3),月工资 NUMBER(4),部门号 CHAR(1),电话 CHAR(8),办公室 CHAR(8),(a)(职工号),(c)(部门号),CHECK( (d))); Create View D_S(D,C,Totals,Averages)As (Select 部门号, (e) from 职工 (f) );
参考答案:
解析:[问题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) PRIMARY KEY , 部门名 CHAR(16), 负责人代码 CHAR(4), 任职时间 DATE, FOREIGN KEY (负责人代码) REFERENCES 职工 (职工号)); 在职工关系中,部门号是一个外码,应进行参照完整性定义。又因为在试题表2-1中的条件“500元≤月工资≤5000元”,所以在职工关系中应加上用户定义完整性。根据 分析职工的SQL定义如下: Create Table 职工 (职工号CHAR(4), 姓名 CHAR(8), 年龄 NUMBER(3), 月工资NUMBER(4), 部门号CHAR(1), 电话 CHAR(8), 办公室CHAR(8), PRIMARY DEY (职工号), FOREIGNKEY (部门号) REFERENCES 部门 (部门号), CHECK(月工资 BETWEEN 500 AND 5000 )); 建立D_S视图需要COUNT函数来统计各部门的人数C,SUM来计算工资总数 Totals,用AVG来计算平均工资Averages,用分组语句GROUPBY来对不同部门进行分组。因此创建D_S视图的SQL语句是: Create ViewD_S (D,C,Totals,Averages)AS (SELECT 部门号,COUNT(*),SUM (月工资),AVG(月工资) FROM 职工 GROUP BY 部门号)