数据库学习之旅——实验6

本次实验的目的是为了学习用户自定义约束,并实践用户完整性,利用短语NOT NULL,UNIQUE,CHECK保证用户定义完整性 。

用户自定义完整性原理解析:

用户完整性:

(1)域完整性是指数据库表中的列必须满足某种特定的数据类型或约束。域约束是最常见的用户定义完整性约束,当有新数据插入到数据库中,系统可以按照定义进行关系属性取值是否正确的检测。其中,约束又包括取值范围精度等规定,表中的CHECK FOREIGN KEY 约束和DEFAULT NOT NULL定义都属于域完整性的范畴。

(2)现在的RDBMS中,一般都有域完整性检查功能。SQL SERVER提供了定义和检验这类完整性的机制,以便用统一方法进行处理。而不是应用程序来承担这一功能。其他的完整性类型都支持用户定义的完整性。

(3)一个属性能否取空值一般由语义决定,也是域约束的内容之一。


以下是本次实验的练习与习题答案:(school表在此并未发出,请参考之前的练习)

USE SCHOOL
--2.3.4实验练习
--(1)创建WORKER表,并自定义两个约束U1以及U2,其中U1规定NAME字段唯一,U2规定SAGE(级别)字段的上限是28。
CREATE TABLE WORKER
(
NUMBER CHAR(5),
NAME CHAR(8) CONSTRAINT U1 UNIQUE,
SEX CHAR(1),
SAGE INT CONSTRAINT U2 CHECK(SAGE<=28),
DEAPARTMENT CHAR(20),
CONSTRAINT PK_WORKER PRIMARY KEY(NUMBER)
)
SELECT * FROM WORKER

--(2)在WORKER表中插入一条合法记录。
INSERT INTO WORKER(NUMBER,NAME,SEX,SAGE,DEAPARTMENT) VALUES('00001','张三','M',20,'CS');
SELECT * FROM WORKER;


--(3)演示插入违反U2约束的例子,U2规定元组的SAGE属性的值必须小于等于28.
INSERT INTO WORKER(NUMBER,NAME,SEX,SAGE,DEAPARTMENT) VALUES('00002','李四','M',29,'CS');
INSERT INTO WORKER(NUMBER,NAME,SEX,SAGE,DEAPARTMENT) VALUES('00002','李四','M',28,'CS');
SELECT * FROM WORKER;


--(4)去除U2约束。
ALTER TABLE WORKER DROP U2;


--(5)重新插入(3)中想要插入的数据,由于去除了U2约束,所以插入成功。
INSERT INTO WORKER(NUMBER,NAME,SEX,SAGE,DEAPARTMENT) VALUES('00003','王四','M',29,'IS');
SELECT * FROM WORKER;

--(6)创建规则RULE_SEX,规定插入或更新的值只能是M或F,并绑定到WORKER的SEX字段。
GO
CREATE RULE RULE_SEX AS @VALUE IN ('F','M');
GO
EXEC SP_BINDRULE RULE_SEX, 'WORKER.[SEX]';


--(7)演示违反规则RULE_SEX的插入操作。
INSERT INTO WORKER VALUES('00004','王浩','1','25','CS');
INSERT INTO WORKER VALUES('00004','王浩','F','25','CS');
SELECT * FROM WORKER;

针对以上练习,一下是自我练习题并附以答案:

--2.3.4自我实践
--(1)加入约束U3,令SAGE的值大于等于0.
ALTER TABLE WORKER ADD CONSTRAINT U3 CHECK(SAGE>=0);


--(2)加入规则R2,确保插入的记录的SAGE值在1到100之间,并绑定到SAGE属性上。
GO
CREATE RULE R2 AS @VALUE BETWEEN 1 AND 100
GO
EXEC SP_BINDRULE R2, 'WORKER.[SAGE]'; 

运行结果请读者自试。

你可能感兴趣的:(数据库学习之旅——实验6)