在SQL Server上创建的主键未标识

时间:2013-02-14 16:26:48

标签: sql sql-server database create-table

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表,因为我想跟踪机器的序列号(这是因为,例如,我们可以为每个型号或类型配备多台机器,但每个其中有唯一的序列号),但创建时出错。你能帮我吗?

1 个答案:

答案 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)
)