1.实体完整性
简单的说,实体完整性就是数据库表的主码唯一且不为空。主码可以是关系的一个属性(即数据库表的一列),也可以是关系的属性组(即表格的多个列),主码可以唯一的标识元组(即数据库表的一行)。
2.实例
1. 创建表时定义列级实体完整性
①定义供应商表的实体完整性
CREATE TABLE supp(/*供应商基本表*/
suppkey INTEGER CONSTRAINT supp_1 PRIMARY KEY, /*供应商编号*/
name CHAR(50), /*供应商名称*/
address VARCHAR(80), /*供应商地址*/
nation INTEGER REFERENCES nation(nationkey),/*国家编号*/
phone CHAR(30), /*供应商电话*/
acctbal REAl,
comment VARCHAR(101) /*备注*/
);
②定义地区表的实体完整性
CREATE TABLE regi(/*地区表*/
regionkey INTEGER CONSTRAINT regi_1 PRIMARY KEY,/*地区编号*/
name CHAR(25), /*地区名称*/
comment CHAR(152) /*备注*/
);
2. 创建表时定义表级实体完整性
①定义供应商表的实体完整性
CREATE TABLE supp2(/*供应商基本表*/
suppkey INTEGER , /*供应商编号*/
name CHAR(50), /*供应商名称*/
address VARCHAR(80), /*供应商地址*/
nation INTEGER REFERENCES nation(nationkey),/*国家编号*/
phone CHAR(30), /*供应商电话*/
acctbal REAl,
comment VARCHAR(101) , /*备注*/
CONSTRAINT supp_2 PRIMARY KEY(suppkey)
);
②定义地区表的实体完整性
CREATE TABLE regi2(/*地区表*/
regionkey INTEGER , /*地区编号*/
name CHAR(25), /*地区名称*/
comment CHAR(152), /*备注*/
CONSTRAINT regi_2 PRIMARY KEY(regionkey)
);
3.定义表后定义实体完整性
CREATE TABLE part2(--先定义零件基本表
partkey INTEGER NOT NULL, /*零件编号*/
name VARCHAR(100), /*零件名称*/
mfgr CHAR(50), /*制造厂*/
brand VARCHAR(50), /*品牌*/
type VARCHAR(25), /*零件类型*/
size INTEGER, /*尺寸*/
container CHAR(10), /*包装*/
retailprice REAL, /*零售价格*/
comment VARCHAR (23) /*备注*/
);
ALTER TABLE part2--再修改零件基本表,增加实体完整性
ADD CONSTRAINT partkey_1 PRIMARY KEY(partkey);
4.主码由多个属性组成时,定义实体完整性
CREATE TABLE partsupp2(/*零件供应联系表*/
partkey INTEGER ,/*零件编号*/
suppkey INTEGER ,/*供应商编号*/
availqty INTEGER,/*可用数量*/
supplycost REAL,/*供应价格*/
comment VARCHAR(199),/*备注*/
PRIMARY KEY(partkey,suppkey)/*定义主码*/
);
5.有多个候选码时定义实体完整性
CREATE TABLE nation2(/*国家表*/
nationkey INTEGER , /*国家编号*/
name CHAR(25) UNIQUE, /*国家名称*/
regionkey INTEGER REFERENCES region(regionkey),/*地区编号*/
comment VARCHAR(152), /*备注*/
CONSTRAINT nationkey_2 PRIMARY KEY(nationkey)
);
6.删除实体完整性
ALTER TABLE part2
DROP CONSTRAINT partkey_1;
7.增加记录,验证实体完整性是否起到作用
SELECT *
FROM nation;
INSERT
INTO nation
VALUES(40,'中华人民共和国',1,'china');
3.注意
可以使用CONSTRAINT 对实体完整性命名,方便对其修改和删除。