某工程项目公司信息管理系统的部分关系模式如下。
职工(职工编号,姓名,性别,居住城市)
项目(项目编号,项目名称,状态,城市,负责人编号)
职工项目(职工编号,项目编号)
其中:一个职工可以同时参与多个项目,一个项目需要多个职工参与。职工的居住城市与项目所在城市来自同一个域。每个项目必须有负责人,且负责人为职工关系中的成员。项目状态有两个:0表示未完成,1表示已完成。
(1)以下是创建职工关系的SQL语句,职工编号唯一识别一个职工,职工姓名不能为空。
CREATE TABLE 职工 (职工编号 CHAR(6),姓名 CHAR(8) __①,性别 CHAR(2),城市 VARCHAR(20),②);
(2)查询至少参加两个项目的职工编号及参与项目数的SQL语句如下。
SELECT职工编号, ③FROM 职工项目
GROUP BY ④
⑤
(3)假设项目编号为“P001”的项目负责人李强(其用户名为U1)有对参与该项目的职工进行查询的权限。建立视图emp和进行授权的SQL语句如下。
(Ⅰ)CREATE VIEW⑥
AS SELECT 职工编号,姓名,性别,城市
FROM 职工
WHERE 职工编号 IN (SELECT ⑦
FROM 职工项目
WHERE ___⑧___)
WITH CHECK OPTION;
(Ⅱ)GPANT ⑨
⑨()
A.SELECTON emp TO U1
B.SELECT TO U1 ON emp
C.INSERT TO U1 ON emp
D.UPDATE TO U1 ON emp
参考答案:A
解析:
由题干中的关键信息“职工编号唯一识别一个职工”可得,属性“职工编号”可以作为“职工”关系模式的主键。同理,由“每个项目必须有负责人,且负责人为职工关系中的成员”和常识可得,属性“项目编号”可以作为“项目”关系模式的主键,“负责人编号”是其外键;由“一个职工可以同时参与多个项目,一个项目需要多个职工参与”可得,属性“职工编号”和“项目编号”既是“职工项目”关系模式的主键,也是其外键。
完整性约束包括实体完整性、参照完整性和用户定义的完整性3类。实体完整性约束规定关系的主属性不能取空值,关系模型中以主码作为唯一性标识;参照完整性约束规定若属性(或属性组)A是关系R上的主码,B是关系S上的外码,A与B相对应(来自相同的域),则B取值为空或者来自于R上的某个A的值。用户定义的完整性约束是针对具体的数据库应用而定义的,它反映该应用所涉及的数据必须满足用户定义的语义要求。
依题意,本题定义了两个完整性约束,职工的姓名不能为空,这是用户定义的完整性约束,因此空缺处应填入“NOTNULL”关键字。职工编号唯一识别一个职工,这是实体完整性约束,用PRIMARY KEY关键字,而空缺处应填入“PRIMARY KEY (职工编号)”。
查询至少参加两个项目的职工编号及参与项目数的SQL语句如下。
SELECT 职工编号,COUNT(项目编号)
FROM 职工项目
GROUP BY 职工编号
HAVING COUNT(项目编号)>=2;
在设计数据库时,可以对不同的用户定义不同的视图,以实现对机密数据的安全保护功能。假设项目编号为“P001”的项目负责人李强(其用户名为U1)有对参与该项目的职工进行查询(即SELECT)的权限,SQL语言用CREATE VIEW命令建立视图,其格式如下。
CREATE VIEW<视图名>[(<列名>[,<列名>]...)]
AS <子查询>
[WITH CHECK OPTION];
在定义视图时,视图的属性列或者全部省略或者全部指定。若全部省略,则表示该视图由子查询中SELECT子句目标列中的诸字段构成,此时要求这些字段是简单的属性名。因此空缺处可填入emp(或emp(职工编号,姓名,性别,城市))。
要对参与项目编号为“P001”项目的职工进行相关操作,则空缺处可填入“职工编号”;空缺处可填入“项目编号=’P001’”。
授权语句的基本语法如下。
GRANT <权限> ON <对象> TO <用户名>;
因此空缺处应填入“SELECT ON emp TO U1”。