问题 单项选择题

某工程项目公司信息管理系统的部分关系模式如下。

职工(职工编号,姓名,性别,居住城市)

项目(项目编号,项目名称,状态,城市,负责人编号)

职工项目(职工编号,项目编号)

其中:一个职工可以同时参与多个项目,一个项目需要多个职工参与。职工的居住城市与项目所在城市来自同一个域。每个项目必须有负责人,且负责人为职工关系中的成员。项目状态有两个: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”。

多项选择题
单项选择题 A1/A2型题