CREATE TABLE sampProduct
(
Product_ID VARCHAR(15) NOT NULL,
Supplier_ID INT NOT NULL,
Category_ID INT NOT NULL,
Unit_Price DECIMAL(10, 2)
PRIMARY KEY(Product_ID)
)
CREATE TABLE sampMachine
(
M_Product_ID VARCHAR(15) NOT NULL,
Serial_No VARCHAR(15) NOT NULL,
Machine_Model VARCHAR(20),
PRIMARY KEY(M_Product_ID, Serial_No),
FOREIGN KEY(M_Product_ID) REFERENCES sampProduct(Product_ID)
)
CREATE TABLE sampService
(
Service_ID VARCHAR(15) NOT NULL,
Serial_No VARCHAR(15) NOT NULL,
Complaint VARCHAR(40) NOT NULL,
PRIMARY KEY(Service_ID),
FOREIGN KEY(Serial_No) REFERENCES sampMachine(Serial_No)
)
Machine是Product的子类型。 M_ProductID通过此键引用父表Product的主键。 Serial_No用于唯一标识计算机。问题是,我想从Serial_No创建一个外键进入Service表,因为我想跟踪机器的序列号(这是因为,例如,我们可以为每个型号或类型配备多台机器,但每个其中有唯一的序列号),但创建时出错。你能帮我吗?
答案 0 :(得分:2)
创建外键的一个要求是,您引用的表必须在要引用的列上具有唯一键。因此,在您的示例中,为了使其工作,您需要在sampMachine(Serial_No)上使用唯一键,以便您可以使用Serial_No创建外键。现在你需要在表sampService中使用M_Product_Id并将其添加到外键定义中。
create table sampService(
M_Product_ID varchar(15) not null,
Service_ID varchar(15) not null,
Serial_No varchar(15) not null,
Complaint varchar(40) not null,
primary key (Service_ID),
foreign key (Serial_No) references sampMachine(m_Product_Id, Serial_No)
)