实验题目 | 实验一 SJK完整性语言 | ||||
实验时间 | 2023.2.22 | 实验地点 | 软件工程基础实验室 | 实验课时 | 2 |
实验目的 | 掌握实体完整性、参照完整性和自定义完整性的定义和维护方法。 | ||||
实验要求 | 定义实体完整性,删除实体完整性。能够写出两种方式定义实体完整性的 SQL 语句:创建表时、创建表后定义实体完整性。设计 SQL 语句验证完整性约束是否起作用。 | ||||
实验步骤 及内容 |
(2)参照实验一供应商的表结构,创建供应商表(Supplier2)时定义实体完整性(表级实体完整性)。 (3)参照实验一供应商的表结构,创建供应商表(Supplier3),在创建表后再定义实体完整性。 (4)参照实验一供应关系表的结构,定义供应关系表(PartSupp1)的实体完整性。 (5)参照实验一国家表的结构,定义国家表(nation1)的实体完整性,其中 nationkey和 name 都是候选码,选择 nationkey 作主码,name 上定义唯一性约束。 (6)给国家表(nation1)增加两条相同记录,验证实体完整性是否起作用。 (7)删除国家表(nation1)的主码。 (8)参照实验一地区表和国家表的结构,先定义地区表(region1)的实体完整性,再定义国家表(nation2)的列级参照完整性和国家表(nation3)的表级参照完整性。 (9)参照实验一订单明细表的结构,定义订单明细表(Lineitem1)的参照完整性。 (10)删除国家表(nation3)的外码。 (11)给国家表(nation3)插入一条记录,验证参照完整性是否起作用。 (12)定义国家表(nation4)的 region key 的缺省属性值为 0 值,表示其他地区。 (13)参照实验一订单明细表的结构,使用 CHECK 定义订单明细表(Lineitem2)中某些属性应该满足的约束。如:装运日期 < 签收日期,退货标记为 A,R 或 N 中某一个。 代码如下: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) );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) );。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);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) );CREATE TABLE nation1( nationkey INT PRIMARY KEY, name CHAR(25) UNIQUE, Region key INT, comment VARCHAR(150), FOREIGN KEY(region key) REFERENCES region(region key) );INSERT INTO nation1 ( nationkey, NAME, Region key, COMMENT ) VALUES( 1, '阿富汗', 1, 'Afghanistan' ); INSERT INTO nation1 ( nationkey, NAME, Region key, COMMENT ) VALUES( 1, '阿富汗', 1, 'Afghanistan' );CREATE TABLE region1( Region key INT PRIMARY KEY, name CHAR(25), comment VARCHAR(150) ); CREATE TABLE nation2( nationkey INT PRIMARY KEY, name CHAR(25), Region key INT, comment VARCHAR(150), FOREIGN KEY(region key) REFERENCES region(region key) ); CREATE TABLE nation3( nationkey INT, name CHAR(25), regionkey INT, comment VARCHAR(150), PRIMARY KEY(nationkey), FOREIGN KEY(regionkey) REFERENCES region(regionkey) );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) ); | ||||
实验结果及分析 | 实验结果大致达预期效果,但在实验中暴露出对知识掌握的生疏,还应进一步熟悉和强化应用 |
02-10
953
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
01-26
849
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)