数据库实验六 完整性语言实验

1.实验目的

掌握实体完整性、参照完整性和自定义完整性的定义和维护方法。

   2.实验内容和要求

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

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

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

   3.实验步骤

(1)参照实验一供应商的表结构,创建供应商表(Supplier1)时定义实体完整性(列级实体完整性)。

源代码:

CREATE TABLE supplier1(
	suppkey INT PRIMARY KEY, #列级完整性
	name CHAR(100),
	address VARCHAR(100),
	nationkey INT,
	phone CHAR(30),
	acctbal NUMERIC(12,2),
	comment VARCHAR(100),
	FOREIGN KEY(nationkey) REFERENCES nation(nationkey)
);

结果截图:

使用命令查看表

DESC Supplier1;

 (2)参照实验一供应商的表结构,创建供应商表(Supplier2)时定义实体完整性(表级实体完整性)。

源代码:

CREATE TABLE supplier2(
	suppkey INT,
	name CHAR(100),
	address VARCHAR(100),
	nationkey INT,
	phone CHAR(30),
	acctbal NUMERIC(12,2),
	comment VARCHAR(100),
	PRIMARY KEY(suppkey),	#表级完整性
	FOREIGN KEY(nationkey) REFERENCES nation(nationkey)
);

结果截图;

使用命令查看表

DESC Supplier2;

 (3)参照实验一供应商的表结构,创建供应商表(Supplier3),在创建表后再定义实体完整性。

源代码:

CREATE TABLE supplier3 (
	suppkey INT,
	NAME CHAR (100),
	address VARCHAR (100),
	nationkey INT,
	phone CHAR (30),
	acctbal NUMERIC (12, 2),
	COMMENT VARCHAR (100)
);
ALTER TABLE supplier3 ADD CONSTRAINT pk_supplier3 PRIMARY KEY (suppkey);
ALTER TABLE supplier3 ADD CONSTRAINT fk_supplier3 FOREIGN KEY (nationkey) REFERENCES nation (nationkey);

结果截图:

 使用命令查看表

DESC Supplier3;

 (4)参照实验一供应关系表的结构,定义供应关系表(PartSupp1)的实体完整性。

源代码:

CREATE TABLE partsupp1(
	partkey INT,
	suppkey INT,
	availqty INT,
	supplycost NUMERIC(10,2),
	comment VARCHAR(200),
	PRIMARY KEY(partkey,suppkey),	#表级完整性
	FOREIGN KEY(partkey) REFERENCES part(partkey),
	FOREIGN KEY(suppkey) REFERENCES supplier(suppkey)
);

结果截图:

使用命令查看表

DESC partsupp1

 (5)参照实验一国家表的结构,定义国家表(nation1)的实体完整性,其中 nationkey和 name 都是候选码,选择 nationkey 作主码,name 上定义唯一性约束。

源代码:

CREATE TABLE nation1(
	nationkey INT PRIMARY KEY,
	name CHAR(25) UNIQUE,
	regionkey INT,
	comment VARCHAR(150),
	FOREIGN KEY(regionkey) REFERENCES region(regionkey)
);

结果截图:

使用命令查看表

DESC nation1;

 (6)给国家表(nation1)增加两条相同记录,验证实体完整性是否起作用。

源代码:

INSERT INTO nation1 (
	nationkey,
	NAME,
	regionkey,
	COMMENT
)
VALUES(
	1,
	'阿富汗',
	1,
	'Afghanistan'
);
INSERT INTO nation1 (
	nationkey,
	NAME,
	regionkey,
	COMMENT
)
VALUES(
	1,
	'阿富汗',
	1,
	'Afghanistan'
);

结果截图:

(7)删除国家表(nation1)的主码。

源代码:

ALTER TABLE nation1 DROP PRIMARY KEY;

结果截图:

 使用命令查看表

DESC nation1;

(8)参照实验一地区表和国家表的结构,先定义地区表(region1)的实体完整性,再定义国家表(nation2)的列级参照完整性和国家表(nation3)的表级参照完整性。

源代码:

CREATE TABLE region1(
	regionkey INT PRIMARY KEY,
	name CHAR(25),
	comment VARCHAR(150)
);
CREATE TABLE nation2(
	nationkey INT PRIMARY KEY,
	name CHAR(25),
	regionkey INT,
	comment VARCHAR(150),
	FOREIGN KEY(regionkey) REFERENCES region(regionkey)
);
CREATE TABLE nation3(
	nationkey INT,
	name CHAR(25),
	regionkey INT,
	comment VARCHAR(150),
	PRIMARY KEY(nationkey),
	FOREIGN KEY(regionkey) REFERENCES region(regionkey)
);

 结果截图:

使用命令查看表

DESC region1;
DESC nation2;
DESC nation3;

 (9)参照实验一订单明细表的结构,定义订单明细表(Lineitem1)的参照完整性。

源代码:

CREATE TABLE lineitem1(
	orderkey INT,
	partkey INT,
	suppkey INT,
	linenumber INT,
	quantity INT,
	extendedprice NUMERIC(8,2),
	discount NUMERIC(3,2),
	tax NUMERIC(3,2),
	returnflag CHAR(1),
	linestatus CHAR(1),
	shipdate DATE,
	commitdate DATE,
	receiptdate DATE,
	shipinstruct CHAR(25),
	shipmode CHAR(10),
	comment VARCHAR(40),
	PRIMARY KEY(orderkey,linenumber),
	FOREIGN KEY(partkey,suppkey) REFERENCES partsupp(partkey,suppkey)
);

结果截图:

使用命令查看表

DESC lineitem1;

 (10)删除国家表(nation3)的外码。

源代码:

ALTER TABLE nation3
	DROP FOREIGN KEY `nation3_ibfk_1`;

结果截图:

使用命令查看表

DESC nation3;

(11)给国家表(nation3)插入一条记录,验证参照完整性是否起作用。

源代码:

INSERT INTO nation3
VALUES(
	1,
	'阿富汗',
	3,
	'Afghanistan'
);

现在对regionkey在region内的regionkey=1和在region外的regionkey=3都能够执行插入,可以证明外键已经被删除。

结果截图:

(12)定义国家表(nation4)的 regionkey 的缺省属性值为 0 值,表示其他地区。

源代码:

CREATE TABLE nation4(
	nationkey INT PRIMARY KEY,
	name CHAR(25),
	regionkey INT DEFAULT 0,
	comment VARCHAR(150),
	FOREIGN KEY(regionkey) REFERENCES region(regionkey)
);

 结果截图:

使用命令查看表

DESC nation4;

(13)参照实验一订单明细表的结构,使用 CHECK 定义订单明细表(Lineitem2)中某些属性应该满足的约束。如:装运日期 < 签收日期,退货标记为 A,R 或 N 中某一个。

源代码:

CREATE TABLE lineitem2(
	orderkey INT,
	partkey INT,
	suppkey INT,
	linenumber INT,
	quantity INT,
	extendedprice NUMERIC(8,2),
	discount NUMERIC(3,2),
	tax NUMERIC(3,2),
	returnflag CHAR(1),
	linestatus CHAR(1),
	shipdate DATE,
	commitdate DATE,
	receiptdate DATE,
	shipinstruct CHAR(25),
	shipmode CHAR(10),
	comment VARCHAR(40),
	PRIMARY KEY(orderkey,linenumber),
	FOREIGN KEY(partkey,suppkey) REFERENCES partsupp(partkey,suppkey),
	CHECK(shipdate < receiptdate),
	CHECK(returnflag IN('A','R','N'))
);

结果截图:

使用命令查看表

DESC lineitem2;

修改 Lineitem2 的一条记录,验证是否违反 CHECK 约束。

源代码:

INSERT INTO lineitem2 (
	orderkey,
	linenumber,
	returnflag,
	shipdate,
	receiptdate
)
VALUES
	(
		115,
		240,
		'A',
		'2021-11-12',
		'2021-11-15'
	);
UPDATE lineitem2
SET returnflag='B'
WHERE orderkey=115;
UPDATE lineitem2
SET shipdate='2021-11-20'
WHERE orderkey=115;

结果截图:

根据下面的截图可以看出,CHECK发挥了作用,更新均失败

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实验六 数据库原理综合实验 1 实验目的 (1) 运用所学的数据库设计技术,针对一个具体的应用系统,完成系统数据库的概念模型、逻辑模型和物理模型的设计。以巩固理论课程上所学的知识,更好地掌握数据库设计技术方法。 (2) 对前面章节所学的知识加以综合应用。 2 实验内容 给定一个应用环境,如学生选课系统、超市管理系统、某企业库存管理系统、学校图书管理系统、学校综合积分管理系统等等。(同学们课从上述选定一个题目,也可以选取一个自己较熟悉的应用环境)。完成下面的工作 2.1 数据库概念模型设计 (1) 进行需求分析。-对系统的语义进行描述(包括功能、所需的数据及他们之间的关系和处理方法) (2) 识别系统中的实体及实体的属性,分析实体之间的联系。 (3) 设计数据库概念模型,画出E-R图。 2.2 数据库逻辑模型设计 (1) 根据数据库概念模型设计数据库的逻辑模型。-将E-R模型转化到逻辑模型 (2) 根据应用需要和规范化理论对逻辑模型进行优化。 2.3 数据库物理模型设计 (1) 针对某种DBMS,设计数据库物理模型,包括表空间、表和索引等于物理存储有关的设计。 (2) 优化物理模型 (3) 生成某种DBMS的SQL语句,创建数据库及其表。 2.4 装载数据 (1) 收集真实数据或者生成模拟数据。 (2) 批量加载数据到数据库中。 (3) 设计一系列SQL语句,尤其是连接查询、嵌套查询等SQL语句,已测试数据库性能。 3 实验要求 (1) 可以借助POWERDESIGNER等系统分析与设计辅助工具进行数据库设计,也可以使用WORD文件直接生成各种设计文档。 (2) 选择的数据库应用系统应该规模适中,不宜太大太复杂,可能做不完;也不宜太小太简单,甚至仅有三两个表组成。 (3) 要设计良好的数据库完整性约束。 (4) 思考题:数据库设计通常由哪些辅助工具?各有哪些优缺点? 4 实验步骤 4.1 数据库概念模型设计 (1) 进行需求分析。 (2) 设计数据库概念模型,画出E-R图。 4.2 数据库逻辑模型设计 (3) 根据数据库概念模型设计数据库的逻辑模型。 (4) 对逻辑模型进行优化。 4.3 数据库物理模型设计 (5) 针对某种DBMS,设计数据库物理模型,包括表空间、表和索引等于物理存储有关的设计。 (6) 优化物理模型 (7) 生成某种DBMS的SQL语句,创建数据库及其表。 4.4 装载数据 (8) 收集真实数据或者生成模拟数据。 (9) 批量加载数据到数据库中。 (10) 设计一系列SQL语句,尤其是连接查询、嵌套查询等SQL语句,已测试数据库性能。 5 总结与体会 5.1 实验中出现的问题及其解决方案 5.2 总结 5.3 体会
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力敲代码呀~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值