数据库实验:用户自定义的完整性

目录

实验内容

1. 实验目的

2. 实验内容

3. 实验重点和难点

4、实验过程

实验分析


实验内容

1. 实验目的

掌握用户自定义完整性的定义和维护方法。

2. 实验内容

针对具体应用语义,选择NULL/NOT NULL、DEFAULT、UNIQUE、CHECK等,定义属性上的约束条件。

3. 实验重点和难

实验重点:NULL/NOT NULL,DEFAULT。

实验难点:CHECK。

4、实验过程

(1)定义属性NULL/NOT NULL属性

定义地区表各属性的NULL/NOT NULL属性

regionkey 设为NOT NULL,name 设为NOT NULL,comment 设为NULL

涉及region表

CREATE TABLE Region(

Regionkey INTEGER NOT NULL PRIMARY KEY,

Name CHAR(25) NOT NULL,

Comment VARCHAR(152) NULL)

(2)定义属性DEFAULT约束

定义国家表的regionkey的缺省属性值为0值。

涉及nation表

CREATE TABLE Nation(

Nationkey INTEGER PRIMARY KEY,

Name CHAR (25),

Regionkey INTEGER DEFAULT 0,

Comment VARCHAR(152),

CONSTRAINT cl FOREIGN KEY(Regionkey) REFERENCES Region(Regionkey));

(3)定义属性UNIQUE约束

定义国家表的名称属性必须唯一的完整性约束。

涉及nation表

CREATE TABLE Nation(

    Nationkey INTEGER PRIMARY KEY,

    Name CHAR(25) UNIQUE,

    Regionkey INTEGER,

    Comment VARCHAR(152));

(4)使用CHECK

使用CHECK定义订单项目表中某些属性应该满足的约束。

装运日期<签收日期

退货标记为R

涉及Lineitem表shipdate,recceiptdate, returnflag

CREATE TABLE Lineitem(

Orderkey INTEGER REFERENCES Orders(Orderkey),

Partkey INTEGER REFERENCES Part(Partkey),

Suppkey INTEGER REFERENCES Supplier(Suppkey),

Linenumber INTEGER,

Quantity REAL,

Extendedprice REAL,

Discount REAL,

Tax REAL,

Returnflag CHAR(1),

Linestatus CHAR(1),

Shipdate DATE,

Commitdate DATE,

Receiptdate DATE,

Shipinstruct CHAR(25),

Shipmode CHAR(10),

Comment VARCHAR(44),

PRIMARY KEY (Orderkey,Linenumber),

FOREIGN KEY (Partkey,Suppkey) REFERENCES PartSupp(partkey,suppkey),

CHECK(Shipdate < Receiptdate),  -- 装运日期 < 签收日期

CHECK(Returnflag IN ('R'))); -- 退货标记为R

(5)修改Lineitem的一条记录验证是否违反CHECK约束

UPDATE Lineitem

SET Shipdate = '2020-06-10',receiptdate = '2020-06-06'

WHERE Orderkey = 2020 AND Linenumber = 1

执行出错,违反CHECK约束


实验分析

实验完成了几个用户自定义的完整性约束条件,其中有NULL/NOT NULL约束,UNIQUE约束,DEFAULT约束。在定义表的时候,可以加上这些约束条件。如果需要给定属性域或属性列满足特定条件,可以使用CHECK子句检查确保属性列符合条件。在对有CHECK的表进行插入、更新等操作时,需要满足CHECK中的条件。

你可能感兴趣的:(Database)