根据上述说明,请给出 (1)“职员”关系模式的主键和外键。 (2)“部门”关系模式的主键和外键。 (1)用SQL定义“职员”关系模式,请在空缺处填入正确的内容。 Create Table 职员 ( 职员号CHAR(5) (a),

admin2006-03-15  43

问题 根据上述说明,请给出
   (1)“职员”关系模式的主键和外键。
   (2)“部门”关系模式的主键和外键。
(1)用SQL定义“职员”关系模式,请在空缺处填入正确的内容。
   Create Table 职员 ( 职员号CHAR(5)    (a),
                     职员姓名CHAR(8),
                     月工资  NUMBER(4),
                     部门号  CHAR(1),
                办公室  CHAR(20),
                电话    CHAR(8),
                  (b)  (部门号),
                CHECK (月工资>=1000 AND月工资<=8000));
(2)针对人数大于等于2的部门创建视图D_View(Dept,D_num,D_Totals, D_AvgPay),其中,Dept为部门号,D_num为部门人数,D_Totals为工资总数,D_AvgPay为平均工资,请在空缺处填入正确的内容。
   Create View D_View (Dept,D_num,D_Totfls,D_AvgPay)As
               (Select部门号,  (c)  
                  from  职员
                    (d)count(*)>=2 WHERE 部门号 IS NOT NULL);

选项

答案(a)PRIMARY KEY (b)FOREIGNKEY (部门号) REFERENCES部门 (c)count(*),Sum (月工资),Avg(月工资) (d)GROUP by部门号HAVING 注:以上答案中的单词可以小写。

解析 用SQL定义关系模式的一个非常重要的问题是完整性控制。完整性控制应具有三方面的功能:定义功能、检测功能、处理功能(一旦发现违背了完整性约束条件,采取相关的动作来保证数据的完整性)。数据库中最重要的约束是声明一个或一组属性形成关系的键。键的约束在SQL的CREATE TABLE命令中声明。在关系系统中,最重要的完整性约束条件是实体完整性和参照完整性。
    1.实体完整性定义
   在关系中只能有一个主键。声明主键有两种方法:
   ①将PRIMARY KEY保留字加在属性类型之后;
   ②在属性列表中引入一个新元素,该元素包含保留字PRIMARY KEY和用圆括号括起的形成该键的属性或属性组列表。
   2.参照完整性
   参照完整性定义格式如下:
   FOREIGN KEY (属性名) REFERENCES 表名(属性名)
   [ON DELETE[CASCADEt|SET NULL]
   参照完整性通过使用保留字FOREIGN KEY定义哪些列为外码;REFERENCES指明外键对应于哪个表的主键;ON DELETE CASCADE指明删除被参照关系的元组时,同时删除参照关系中的元组;SETNULL表示置为空值方式。
   本试题中,职员关系的主键为职员号,部门关系的主键为部门号,这样,职员关系中的部门号是外键。其中,职员关系的主键职员号可采用如下两种方式定义:
   职员号CHAR(5)PRIMARY KEY或者是PRIMARY KEY (职员号)
   根据分析问题2(1)职员关系的SQL定义如下:
   Create Table职员 ( 职员号CHAR (5) PRIMARY KEY,
                    职员姓名CHAR(8),
                    月工资  NUMBER(4),
                    部门号  CHAR(1),
                    办公室  CHAR(20),
                    电话    CHAR(8),
                    FOREIGN KEY (部门号) REFERENCES 部门(部门号),
   问题2(2)的关键在于要对职员关系采用分组语句按部门分类,并统计。如果统计的元组个数大于等于2,则在结果集中。根据分析,针对人数大于等于2的部门创建视图D——View(Dept,D_num,D_Tomis,D_AvgPay)如下:
   Create View D View(Dept,D num,D Totals,D AvgPay)As
   (Select 部门号,count (*),Sum(月工资),Avg(月工资)
   from  职员
   GROUP by部门号 HAVING count(*)>=2 WHERE 部门号 IS NOT NULL);
转载请注明原文地址:https://kaotiyun.com/show/bfDZ777K
0

相关试题推荐
最新回复(0)