1. 下面创建工作关系WORKS的SQL语句的a和b空缺部分补充完整,要求指定关系的主码、外码(4分)

CREATE TABLE WORKS ( Eno CHAR(18), Cno CHAR(50), Salary int CHECK (Salary >=1800), PRIMARY KEY (Eno, Cno), – a FOREIGN KEY (Eno) REFERENCES EMP (Eno), FOREIGN KEY (Cno) REFERENCES COMPANY (Cno) – b );

这段SQL语句的作用是创建一个名为WORKS的表,该表包含了员工工号、公司编号和工资三个字段,其中工资必须大于等于1800。该表的主键是员工工号和公司编号的组合,表示一个员工可以在多家公司工作,但不能在同一家公司重复工作。该表的外键是员工工号和公司编号,分别参照了EMP表和COMPANY表的主键,表示员工和公司必须存在于对应的表中。

  1. Salary int CHECK(Salary >1800)的文字含义是什么?(2分)

这个语句的意思是定义了一个名为Salary的整数类型的字段,并且对该字段的值进行了约束,要求必须大于1800。如果插入或更新该字段的值时,不满足这个条件,那么操作将会失败,并抛出一个错误。

  1. 员工关系模式EMP的候选键有哪些?(2分)

候选键是指能够唯一标识关系中每个元组的属性集合。根据题目给出的EMP表的定义,可以看出员工工号Eno是唯一的,因此它是一个候选键。另外,如果假设员工的姓名Ename和手机号码Tel也是唯一的,那么它们也可以作为候选键。因此,EMP表的候选键有三个,分别是{Eno},{Ename}和{Tel}。

  1. 阅读代码,用文字解释功能。(2分)

Create unique index index1 on EMP(Tel)

这段代码的作用是在EMP表的Tel字段上创建一个名为index1的唯一索引,索引的作用是加速查询和排序操作,以及保证Tel字段的值不重复。如果在插入或更新Tel字段的值时,出现了重复的值,那么操作将会失败,并抛出一个错误。

  1. 用文字解释下面语句的功能(2分)。

CREATE VIEW FEMP(Eno, Ename, Cno, Cname, Salary) AS SELECT EMP.Eno, Ename, COMPANY.Cno, Cname, Salary FROM EMP, COMPANY, WORKS WHERE EMP.Eno=WORKS.Eno AND COMPANY.Cno=WORKS.Cno AND Sex=‘女’;

这个语句的作用是创建一个名为FEMP的视图,该视图包含了EMP表中的Eno和Ename字段,COMPANY表中的Cno和Cname字段,以及WORKS表中的Salary字段。该视图的数据来源于三个表的连接查询,条件是员工工号、公司编号和性别。该视图只显示性别为女的员工的相关信息。

  1. 用文字解释下面语句的功能(2分)

GRANT INSERT, DELETE ON TABLE EMP TO 人事经理

这个语句的作用是授予人事经理这个角色对EMP表的插入和删除的权限,即允许人事经理在EMP表中添加或删除员工的记录。

  1. 阅读代码,用文字解释功能 (4分)

CREATE PROCEDURE MAX AS SELECT COMPANY.Cno, Cname FROM COMPANY, WORKS WHERE COMPANY.Cno=WORKS.Cno GROUP BY COMPANY.Cno, Cname HAVING COUNT()>=ALL(SELECT COUNT() FROM WORKS GROUP BY Cno);

这个语句的作用是创建一个名为MAX的存储过程,该过程可以执行一个查询,查询的结果是在WORKS表中工作人数最多的公司的编号和名称。该查询的逻辑是先将COMPANY表和WORKS表按照公司编号进行连接,然后按照公司编号和名称进行分组,再筛选出每个分组的员工数量大于等于所有分组的最大值的分组,即工作人数最多的公司。

  1. 写出其他程序员调用上面的PROCEDURE的SQL代码(2分)

调用上面的PROCEDURE的SQL代码如下:

EXEC MAX;

或者

CALL MAX;

这两种方式都可以执行MAX存储过程,并返回查询结果。

(1)下面的关系代数的含义是:

  • ΠTel(σEname =‘张爱国’∧ Title =‘高级工程师’(EMP))表示从员工表EMP中选择姓名为“张爱国”且职称为“高级工程师”的元组,并投影出它们的手机号码Tel,得到一个新的关系。
  • ΠCity, Ename,Title,Salary (σCname =’%发动机%’∧Salary>=5000 (EMP∞COMPANY∞WORKS))表示从员工表EMP、公司表COMPANY和工作表WORKS中进行自然连接,得到一个包含所有属性的关系,然后从中选择公司名称包含“发动机”且工资不低于5000的元组,并投影出它们的城市City、姓名Ename、职称Title和工资Salary,得到一个新的关系。

(2)一个和ΠCity, Ename,Title,Salary (σCname =’%发动机%’∧Salary>=5000 (EMP∞COMPANY∞WORKS)) 功能等价且运行效率较高的关系代数表达式是:

  • ΠCity, Ename,Title,Salary (σCname =’%发动机%’ (COMPANY) ∞ σSalary>=5000 (WORKS) ∞ EMP)

这个表达式的优化之处在于先对COMPANY和WORKS进行选择操作,减少了自然连接的元组数量,然后再与EMP进行自然连接,最后进行投影操作。

(3)下面代码的含义是:

  • 创建一个名为Salary_TRG的触发器,当员工表EMP发生更新操作后,触发该触发器的执行。
  • 该触发器的作用是对每一行更新后的元组,调用一个名为SalaryADD的函数,根据员工号Eno计算出员工的新工资,然后更新工作表WORKS中相应员工的工资Salary。
  • 这样可以保证员工表EMP和工作表WORKS中的工资数据一致。

(1)该关系模式设计存在什么问题?(2分)

该关系模式设计存在以下问题:

  • 数据冗余:车队编号和车队主管之间存在函数依赖,即一个车队编号对应一个车队主管,因此车队主管的信息在关系中重复出现,造成存储空间的浪费和数据的不一致性。
  • 插入异常:如果要插入一个新的车队,必须同时指定一个司机编号和一个汽车牌照,否则会违反关系的完整性约束,这与实际情况不符,因为一个车队可以没有司机或汽车。
  • 删除异常:如果要删除一个司机或一个汽车的信息,必须同时删除其所属的车队的信息,否则会造成数据的丢失,这与实际情况不符,因为一个车队可以存在而不依赖于某个司机或汽车。
  • 修改异常:如果要修改一个车队的主管,必须同时修改所有属于该车队的司机和汽车的记录,否则会造成数据的不一致,这增加了修改的工作量和出错的风险。

(2)写出该关系模式的侯选码。(2分)

侯选码是指能够唯一标识关系中每个元组的属性集合。根据题目给出的关系模式的定义,可以看出司机编号和汽车牌照是唯一的,因此它们是两个侯选码。因此,该关系模式的侯选码有两个,分别是{司机编号}和{汽车牌照}。

(3)写出该关系模式存在的函数依赖(4分)

函数依赖是指一个属性集合的值能够决定另一个属性集合的值。根据题目给出的关系模式的定义,可以得出以下函数依赖:

  • 司机编号 -> 汽车牌照,行驶公里,车队编号,车队主管
  • 汽车牌照 -> 司机编号,行驶公里,车队编号,车队主管
  • 车队编号 -> 车队主管

(4)该关系模式最高满足第几范式?并说明理由。(3分)

范式是关系型数据库的理论基础,是我们在设计数据库结构过程中所要遵循的规则和指导方法,经过设计范式的指导设计,我们就可以得到一个十分完善,逻辑清晰的数据库设计了。其中,我们主要遵循第一范式、第二范式、第三范式和BC范式,各种范式呈递次规范,越高的范式数据库冗余越小,即满足第三范式则一定满足第一第二范式,满足第二范式一定满足第一范式。

该关系模式最高满足第一范式,即关系中的每个属性都是不可分割的原子值。该关系模式不满足第二范式,因为它存在部分函数依赖,即非主属性车队主管依赖于主属性的一部分车队编号。该关系模式也不满足第三范式,因为它存在传递函数依赖,即非主属性车队主管间接依赖于主属性司机编号或汽车牌照。

(5)如果该关系模式不满足3NF,将该关系模式分解为满足3NF的关系模式集。(5分)

为了使该关系模式满足3NF,我们需要消除部分函数依赖和传递函数依赖,即将一个关系模式分解为多个关系模式,使得每个关系模式中的非主属性都完全函数依赖于该关系的主属性。具体的分解方法如下:

首先,将原关系模式R按照侯选码{司机编号}和{汽车牌照}分解为两个关系模式R1和R2,分别包含以下属性:

    • R1(司机编号,行驶公里,车队编号)
    • R2(汽车牌照,行驶公里,车队编号)

然后,将关系模式R1和R2按照车队编号这一非主属性分解为四个关系模式R3、R4、R5和R6,分别包含以下属性:

    • R3(司机编号,行驶公里)
    • R4(司机编号,车队编号)
    • R5(汽车牌照,行驶公里)
    • R6(汽车牌照,车队编号)

最后,将关系模式R4和R6按照车队编号这一主属性合并为一个关系模式R7,包含以下属性:

    • R7(车队编号,车队主管,司机编号,汽车牌照)

经过上述分解和合并,得到的满足3NF的关系模式集为:

    • R3(司机编号,行驶公里)
    • R5(汽车牌照,行驶公里)
    • R7(车队编号,车队主管,司机编号,汽车牌照)