1
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)
)

机器是产品的子类型。M_ProductID 通过该键引用父表 Product 的主键。Serial_No 用于唯一标识一台机器。问题是,我想从 Serial_No 创建一个外键到服务表中,因为我想跟踪机器的序列号(这是因为,例如,我们可以为每个型号或类型拥有很多机器,但每个其中有其唯一的序列号),但创建时出错。你能帮我吗?

4

1 回答 1

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)
)
于 2013-02-14T16:37:43.190 回答