建立一个供应商、零件关系库,
其中关系供应商S(Sno,Sname,Status,City)属性分别表示供应商代码、供应商名称、供应商状态、供应商城市。
其中关系零件P(Pno,Pname,Color,Weight,City)属性分别表示零件号、零件名称、颜色、重量、产地。
要求如下:
1)供应商代码不能是空的,且是唯一的。供应商的名称也必须是唯一的。
2)零件号不能是空的,且是唯一的。零件名称不能是空的。
3)一个供应商可以供应多个零件,而一个零件可以由多个供应商供应。
以下是具体的Create语句:
CREATE TABLE S(
Sno INT,
Sname VARCHAR(100) UNIQUE,
Status VARCHAR(100),
City VARCHAR(100) ,
PRIMARY KEY(Sno)
)
CREATE TABLE P(
Pno INT,
Pname VARCHAR(100) NOT NULL,
Color VARCHAR(100),
Weight INT,
City VARCHAR(100),
PRIMARY KEY(Pno)
)
CREATE TABLE SP(
Sno INT,
Pno INT,
quality INT,
PRIMARY KEY(Sno,Pno),
FOREIGN KEY(Sno) REFERENCES S(Sno),
FOREIGN KEY(Pno) REFERENCES P(Pno)
)
对于约束的分析:
1、主键约束:
单属性主键:在表S中,设置属性Sno为主键。由于主键本身要求非空且唯一,所以在Sno列处不用再加上unique和not null的约束。单属性主键也可以在列Sno后方直接定义,如:
CREATE TABLE S(
Sno INT PRIMARY KEY,
Sname VARCHAR(100) UNIQUE,
Status VARCHAR(100),
City VARCHAR(100)
)
联合主键:在表SP中,属性Sno和Pno共同构成联合主键。
2、外键约束:在表SP中,Sno来源于表S的Sno,所以需要设置外键约束。Pno字段同理。
3、非空约束:属于列级完整性约束条件,在列定义时设置 。
4、唯一约束:属于列级完整性约束条件,在列定义时设置 。
5、check约束:本例子中没有涉及。比如表S中City只能设置为“北京”或“上海”,则可以进行如下设置:
CREATE TABLE S(
Sno INT PRIMARY KEY,
Sname VARCHAR(100) UNIQUE,
Status VARCHAR(100),
City VARCHAR(100),
CHECK ( City IN ('北京','上海'))
)