2013-02-14 62 views
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到Service表的外鍵,因爲我想跟蹤機器的序列號(這是因爲,例如,我們可以爲每個模型或類型分配許多機器,但每個機器他們有他們獨特的序列號),但是創造有一個錯誤。你們能幫我嗎?在SQL Server上創建的主鍵未被識別

+0

請花時間格式化您的代碼,以便我可以嘗試幫助您。 – lolol 2013-02-14 16:28:28

+5

和錯誤是? – 2013-02-14 16:28:50

+1

如果您想從其他表中引用它,您必須在'sampMachine(Serial_No)'上定義'UNIQUE'約束(或索引)。 – 2013-02-14 16:31:31

回答

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