《数据库系统原理》实验报告 下载本文

内容发布更新时间 : 2024/12/25 13:00:56星期一 下面是文章的全部内容请认真阅读。

一、 实验目的

1、 掌握实体完整性的定义和维护方法; 2、 掌握参照完整性的定义和维护方法; 3、 掌握用户自定义完整性的定义和维护方法;

二、 实验内容和要求

1、定义实体完整性,删除实体完整性。能够写出两种方式定义实体完整性的SQL语句:创建表时定义实体完整性、创建表后定义实体完整性。设计SQL语句验证完整性约束是否起作用。

2、定义参照完整性,定义参照完整性的违规处理,删除参照完整性。写出两种方式定义参照完整性的SQL语句:创建表时定义参照完整性、创建表后定义参照完整性。

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

三、实验过程

1、实体完整性实验

(1)创建表时定义实体完整性(列级实体完整性) 定义供应商表的实体完整性。 CREATE TABLE Supplier(

suppkey INSERT CONSTRAINT PK_supplier PRIMARY KEY, name CHAR(25),

address VARCHAR(40), nationkey INSERT, phone CHAR(15), acctbal REAL,

comment VARCHAR(101));

(2)创建表时定义实体完整性(表级实体完整性) 定义供应商表的实体完整性。

CREATE TABLE Supplier( suppkey INSERT, name CHAR(25),

address VARCHAR(40), nationkey INSERT, phone CHAR(15), acctbal REAL,

comment VARCHAR(101),

CONSTRAINT PK_supplier PRIMARY KEY(suppkey));

(3)创建表后定义实体完整性 定义供应商表。

CREATE TABLE Supplier( suppkey INSERT, name CHAR(25),

address VARCHAR(40), nationkey INSERT, phone CHAR(15), acctbal REAL,

comment VARCHAR(101));

ALTER TABLE Supplier /*再修改供应商表,增加实体完整性*/ ADD CONSTRAINT PK_Supplier PRIMARY KEY(suppkey);

(4)定义实体完整性(主码由多个属性组成) 定义供应关系表的实体完整性。

CREATE TABLE PartSupp( partkey INTEGER, suppkey INTEGER, availqty INTEGER, supplycost REAL,

comment VARCHAR(199),

PRIMARY KEy (partkey,suppkey));

/*主码由多个属性组成,实体完整性必须定义在表级*/

(5)有多个候选码时定义实体完整性

定义国家表的实体完整性,其中nationkey和name都是候选码,选择nationkey作为主码,name上定义唯一性约束。

CREATE TABLE nation (

nationkey INTEGERCONSTRAINT PK_nation PRIMARY KEY, name CHAR (25) UNIQUE, regionkey INSERT,

comment VARCHAR(152));

(6)删除实体完整性 删除国家实体的主码。

ALTER TABLE nation DROP CONSTRAINT PK_nation;

(7)增加两条相同记录,验证实体完整性是否起作用 /*插入两条主码相同的记录就会违反实体完整性约束*/

INSERT INTO Supplier(suppkey,name,address,nationkey,phone,acctbal,comment) VALUES(11,'test1','test1',101,'12345678',0.0,'test1');

INSERT INTO Supplier(suppkey,name,address,nationkey,phone,acctbal,comment) VALUES(11,'test2','test2',102,'23456789',0.0,'test2');

2、参照完整性实验

(1)创建表时定义参照完整性

先定义地区表的实体完整性,再定义国家表上的参照完整性。

CREATE TABLE region(

regionkey IINTEGER PRIMARY KEY, name CHAR(25),

comment VARCHAR(152));

CREATE TABLE nation(

nationkey IINTEGER PRIMARY KEY, name CHAR(25),

regionkey INTEGER REFERENCES Region(regionkey),/*列级参照完整性*/ comment VARCHAR(152)); 或者

CREATE TABLE nation(

nationkey INTEGER PRIMARY KEY, name CHAR(25), regionkey INTEGER,

comment VARCHAR(152),

CONSTRAINT FK_Nation_regionkey FOREIGN KEY (regionkey) REFERENCES Region(regionkey));/*表级参照完整性*/

(2)创建表后定义参照完整性 定义国家表的参照完整性。

CREATE TABLE nation(

nationkey INTEGER PRIMARY KEY, name CHAR(25), regionkey INTEGER,

comment VARCHAR(152));

ALTER TABLE Nation

FOREIGN KEY (regionkey)REFERENCES Region(regionkey);

(3)定义参照完整性(外码由多个属性组成) 定义订单项目表的参照完整性。

CREATE TABLE PartSupp( partkey INTEGER, suppkey INTEGER, availqty INTEGER, supplycost REAL,

comment VARCHAR(199),

PRIMARY KEy (partkey,suppkey));

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));

(4)定义参照完整性的违约处理

定义国家表的参照完整性,当删除或修改被参照表时,设置参照表中相应记录的值为空值。

CREATE TABLE nation(

nationkey INTEGER PRIMARY KEY, name CHAR(25), regionkey INTEGER,

comment VARCHAR(152),

CONSTRAINT FK_Nation_regionkey FOREIGN KEY (regionkey)