给定员工关系
EMP(EmpID,Ename,sex,age,tel,DepID),
其属性含义分别为:员工号、姓名、性别、年龄、电话、部门号;
部门关系 DEP(DepID,Dname,Dtel,DEmpID),
其属性含义分别为:部门号、部门名、电话、负责人号。若要求 DepID 参照部门关系 DEP 的主码 DepID,则可以在定义 EMP 时用(问题1)进行约束。若要查询开发部的负责人姓名、年龄,则正确的关系代数表达式为(问题2)。
本题考察的是外键约束的定义方式与关系代数表达式(选择、投影、连接)的应用。
在模式中,EMP.DepID 应参照 DEP 的主键 DepID,定义时应使用外键约束;查询“开发部负责人姓名、年龄”需要先选出 Dname=“开发部”的部门,再与 EMP 进行连接,并加入 EmpID=DEmpID 的条件以锁定负责人,再投影出 Ename、age。
问题 1:
A选项 Primary Key (DepID) On DEP (DepID):定义的是 DEP 的主键,不是在 EMP 中建立参照,错误。
B选项 Primary Key (DepID) On EMP (DepID):把 EMP 的 DepID 设为主键,与题意不符,错误。
C选项 Foreign Key (DepID) References DEP (DepID):在 EMP 中把 DepID 声明为外键,参照 DEP(DepID),完全符合题意,正确。
D选项 Foreign Key (DepID) References EMP (DepID):把 EMP.DepID 参照 EMP 自身,不符合实际参照关系,错误。
所以选择 C。
问题2:
为得到负责人需满足三个关键步骤:选择部门σ_{Dname='开发部'}(DEP)、连接与 EMP(自然连接在 DepID 上),再施加负责人条件EmpID = DEmpID,最后投影姓名与年龄。
A选项:对 Emp × Dep 做选择“第一属性=开发部”,既无明确属性位置语义也缺少负责人条件,错误。
B选项:先对 Dep 做选择 σ_{2=开发部}(第二属性 Dname),与 Emp 做自然连接(在公共属性 DepID 上),再用 σ_{1=9} 表示 EmpID(第1位)= DEmpID(第9位)锁定负责人,最后投影第2、4位(Ename、age),表达正确。
C选项:Emp 与选出的 Dep 直接笛卡尔积后只投影 2、3 位,既无连接条件也无负责人条件,错误。
D选项:对 Emp 先做投影再与 Dep 自然连接,仅限定部门,未施加 EmpID=DEmpID 的负责人条件,会得到该部门所有员工而非负责人,错误。
所以选择 B。
