问答题
[问题1]
以下是创建部分关系表的SQL语句,请将空缺部分补充完整。
CREATE TABLE客户(
客户号 CHAR(5) {{U}} (a) {{/U}} ,
姓名 CHAR(30),
性别 CHAR(2) {{U}} (b) {{/U}} ,
地址 CHAR(30),
邮编 CHAR(6));
CREATE TABLE 订单(
订单号CHAR(4),
时间 CHAR(10),
金额 NUMBER(6,2),
客户号CHAR(5)NOTNULL,
PRIMARY KEY(订单号),
{{U}}(c) {{/U}} ;
【正确答案】
【答案解析】NOT NULL UNIQUE或NOT NULL PRIMARY KEY 或 PRIMARY KEY
(b)CHECK (VALUE IN('男','女'))
(c)FOREIGN KEY (客户号) REFERENCES 客户(客户号)
[分析]
本题考查的是SQL语言中的创建基本表命令。
SQL中使用CREATE TABLE命令来定义基本表,其一般格式为:
CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]...
[,<表级完整性约束条件>]);
本题着重考查完整性约束的定义。
· 实体完整性定义。声明主键有两种方法:将PRIMARYKEY保留字加在属性类型之后;在属性列表中引入一个新元素,该元素包含保留字PRIMARY KEY和用圆括号括起的构成主键的属性或者属性组列表。
· 参照完整性定义。FOREIGNKEY(属性名)REFERFENCES表名(属性名)。参照完整性通过保留字FOREIGNKEY定义哪些列为外码,REFERFENCES指明外码所对应的被参照表的主码。
· 用户定义完整性定义。用CHECK后增加一条检查子句来完成属性值上的约束。
根据题目描述,客户号唯一标识一位客户,客户性别取值为“男”或者“女”,一份订单必须且仅对应一位客户。所以,客户号是客户表的主键,客户性别的取值只能为“男”或者“女”,订单中的客户号必须外键依赖于客户。
因此,客户号应表示为主键:
(a)NOT NULL UNIQUE或NOT NULL PRIMARY KEY或PRIMARY KEY;
客户性别的取值只能为“男”或者“女”:
(b)CHECK (VALUE IN('男','女'))
订单中的客户号必须外键依赖于客户:
(c)FOREIGN KEY (客户号) REFERENCES客户(客户号)