Initial commit
This commit is contained in:
79
Experiment3/Exp3-1.sql
Normal file
79
Experiment3/Exp3-1.sql
Normal file
@@ -0,0 +1,79 @@
|
||||
Use TPCH;
|
||||
Go
|
||||
-- (1) 创建表时定义实体完整性(列级实体完整性)
|
||||
-- 定义供应商表的实体完整性。
|
||||
CREATE TABLE Sales_Exp3.Supplier(
|
||||
suppkey INT CONSTRAINT PK_Supplier PRIMARY KEY,
|
||||
name CHAR(25),
|
||||
address VARCHAR(40),
|
||||
nationkey INT,
|
||||
phone CHAR(15),
|
||||
acctbal REAL,
|
||||
comment VARCHAR(101)
|
||||
);
|
||||
Go
|
||||
DROP TABLE Sales_Exp3.Supplier;
|
||||
Go
|
||||
-- (2) 创建表时定义实体完整性(表级实体完整性)
|
||||
-- 定义供应商表的实体完整性。
|
||||
CREATE TABLE Sales_Exp3.Supplier (
|
||||
suppkey INT,
|
||||
name CHAR(25),
|
||||
address VARCHAR(40),
|
||||
nationkey INT,
|
||||
phone CHAR(15),
|
||||
acctbal REAL,
|
||||
comment VARCHAR(101),
|
||||
CONSTRAINT PK_Supplier PRIMARY KEY (suppkey)
|
||||
);
|
||||
Go
|
||||
DROP TABLE Sales_Exp3.Supplier;
|
||||
Go
|
||||
-- (3) 创建表后定义实体完整性
|
||||
-- 定义供应商表。
|
||||
CREATE TABLE Sales_Exp3.Supplier (
|
||||
suppkey INT NOT NULL,
|
||||
name CHAR(25),
|
||||
address VARCHAR(40),
|
||||
nationkey INT,
|
||||
phone CHAR(15),
|
||||
acctbal REAL,
|
||||
comment VARCHAR(101)
|
||||
);
|
||||
ALTER TABLE Sales_Exp3.Supplier /* 再修改供应商表,增加实体完整性 */
|
||||
ADD CONSTRAINT PK_Supplier PRIMARY KEY (suppkey);
|
||||
Go
|
||||
-- (4) 定义实体完整性(主码由多个属性组成)
|
||||
-- 定义供应关系表的实体完整性。
|
||||
CREATE TABLE Sales_Exp3.PartSupp (
|
||||
partkey INT,
|
||||
suppkey INT,
|
||||
availqty INT,
|
||||
supplycost REAL,
|
||||
comment VARCHAR(199),
|
||||
PRIMARY KEY (partkey, suppkey)
|
||||
);
|
||||
/* 主码由多个属性组成,实体完整性必须定义在表级 */
|
||||
Go
|
||||
-- (5) 有多个候选码时定义实体完整性
|
||||
-- 定义国家表的实体完整性,其中nationkey和name都是候选码,选择nationkey作为主码,name上定义唯一性约束。
|
||||
CREATE TABLE Sales_Exp3.nation (
|
||||
nationkey INT CONSTRAINT PK_Nation PRIMARY KEY,
|
||||
name CHAR(25) UNIQUE,
|
||||
regionkey INT,
|
||||
comment VARCHAR(152)
|
||||
);
|
||||
Go
|
||||
-- (6) 删除实体完整性
|
||||
-- 删除国家实体的主码。
|
||||
ALTER TABLE Sales_Exp3.nation
|
||||
DROP CONSTRAINT PK_Nation;
|
||||
Go
|
||||
-- (7) 增加两条相同记录,验证实体完整性是否起作用
|
||||
/* 插入两条主码相同的记录就会违反实体完整性约束 */
|
||||
INSERT INTO Sales_Exp3.Supplier (suppkey, name, address, nationkey, phone, acctbal, comment)
|
||||
VALUES (11, 'test1', 'test1_addr', 101, '12345678', 0.0, 'test1_comment');
|
||||
INSERT INTO Sales_Exp3.Supplier (suppkey, name, address, nationkey, phone, acctbal, comment)
|
||||
VALUES (11, 'test2', 'test2_addr', 102, '23456789', 0.0, 'test2_comment');
|
||||
Go
|
||||
/* [23000][2627] 行 5: 违反了 PRIMARY KEY 约束“PK_Supplier”。不能在对象“Sales_Exp3.Supplier”中插入重复键。重复键值为 (11)。 */
|
||||
105
Experiment3/Exp3-2.sql
Normal file
105
Experiment3/Exp3-2.sql
Normal file
@@ -0,0 +1,105 @@
|
||||
Use TPCH;
|
||||
Go
|
||||
-- (1) 创建表时定义参照完整性
|
||||
-- 先定义地区表的实体完整性,再定义国家表上的参照完整性。
|
||||
CREATE TABLE Sales_Exp3.region (
|
||||
regionkey INT PRIMARY KEY,
|
||||
name CHAR(25),
|
||||
comment VARCHAR(152)
|
||||
);
|
||||
CREATE TABLE Sales_Exp3.nation (
|
||||
nationkey INT PRIMARY KEY,
|
||||
name CHAR(25),
|
||||
regionkey INT REFERENCES Sales_Exp3.region(regionkey), /* 列级参照完整性 */
|
||||
comment VARCHAR(152)
|
||||
);
|
||||
-- OR
|
||||
DROP TABLE Sales_Exp3.nation;
|
||||
CREATE TABLE Sales_Exp3.nation (
|
||||
nationkey INT PRIMARY KEY,
|
||||
name CHAR(25),
|
||||
regionkey INT,
|
||||
comment VARCHAR(152),
|
||||
CONSTRAINT FK_Nation_Region FOREIGN KEY (regionkey) REFERENCES Sales_Exp3.region(regionkey) /* 表级参照完整性 */
|
||||
);
|
||||
Go
|
||||
DROP TABLE Sales_Exp3.nation;
|
||||
Go
|
||||
-- (2) 创建表后定义参照完整性
|
||||
-- 定义国家表的参照完整性。
|
||||
CREATE TABLE Sales_Exp3.nation (
|
||||
nationkey INT PRIMARY KEY,
|
||||
name CHAR(25),
|
||||
regionkey INT,
|
||||
comment VARCHAR(152)
|
||||
);
|
||||
ALTER TABLE Sales_Exp3.nation
|
||||
ADD CONSTRAINT FK_Nation_Region FOREIGN KEY (regionkey) REFERENCES Sales_Exp3.region(regionkey);
|
||||
Go
|
||||
-- (3) 定义参照完整性(外码由多个属性组成)
|
||||
-- 定义订单项目表的参照完整性。
|
||||
CREATE TABLE Sales_Exp3.Supplier(suppkey INT PRIMARY KEY, name CHAR(25));
|
||||
CREATE TABLE Sales_Exp3.Part(partkey INT PRIMARY KEY, name VARCHAR(55));
|
||||
CREATE TABLE Sales_Exp3.Orders(orderkey INT PRIMARY KEY, orderdate DATE);
|
||||
Go
|
||||
CREATE TABLE Sales_Exp3.PartSupp (
|
||||
partkey INT,
|
||||
suppkey INT,
|
||||
availqty INT,
|
||||
supplycost REAL,
|
||||
comment VARCHAR(199),
|
||||
PRIMARY KEY (partkey, suppkey)
|
||||
);
|
||||
CREATE TABLE Sales_Exp3.Lineitem (
|
||||
orderkey INT REFERENCES Sales_Exp3.Orders(orderkey),
|
||||
partkey INT REFERENCES Sales_Exp3.Part(partkey),
|
||||
suppkey INT REFERENCES Sales_Exp3.Supplier(suppkey),
|
||||
linenumber INT,
|
||||
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 Sales_Exp3.PartSupp(partkey, suppkey)
|
||||
);
|
||||
Go
|
||||
DROP TABLE Sales_Exp3.nation;
|
||||
Go
|
||||
-- (4) 定义参照完整性的违约处理
|
||||
-- 定义国家表的参照完整性,当删除或修改被参照表记录时,设置参照表中相应记录的值为空值。
|
||||
CREATE TABLE Sales_Exp3.nation (
|
||||
nationkey INT PRIMARY KEY,
|
||||
name CHAR(25),
|
||||
regionkey INT NULL,
|
||||
comment VARCHAR(152),
|
||||
CONSTRAINT FK_Nation_regionkey
|
||||
FOREIGN KEY (regionkey) REFERENCES Sales_Exp3.region(regionkey)
|
||||
ON DELETE SET NULL
|
||||
ON UPDATE SET NULL
|
||||
);
|
||||
Go
|
||||
-- (5) 删除参照完整性
|
||||
-- 删除国家表的外码
|
||||
ALTER TABLE Sales_Exp3.nation
|
||||
DROP CONSTRAINT FK_Nation_regionkey;
|
||||
Go
|
||||
-- (6) 插入一条国家记录,验证参照完整性是否起作用
|
||||
/* 插入一条国家记录,如果'1001'号地区记录不存在,违反参照完整性约束。 */
|
||||
ALTER TABLE Sales_Exp3.nation
|
||||
ADD CONSTRAINT PK_Nation_regionkey
|
||||
FOREIGN KEY (regionkey) REFERENCES Sales_Exp3.region(regionkey)
|
||||
ON DELETE SET NULL
|
||||
ON UPDATE SET NULL;
|
||||
Go
|
||||
INSERT INTO Sales_Exp3.nation (nationkey, name, regionkey, comment)
|
||||
VALUES (1001, 'nation1', 1001, 'comment1');
|
||||
Go
|
||||
/* [23000][547] 行 1: INSERT 语句与 FOREIGN KEY 约束"PK_Nation_regionkey"冲突。该冲突发生于数据库"TPCH",表"Sales_Exp3.region", column 'regionkey'。 */
|
||||
2
Experiment3/Exp3-3.sql
Normal file
2
Experiment3/Exp3-3.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
Use TPCH;
|
||||
Go
|
||||
Reference in New Issue
Block a user