不能创建外键“有被引用表中没有主或候选键”
这是我的表1:不能创建外键“有被引用表中没有主或候选键”
CREATE TABLE PurchasedProducts
(
Purchase_Order_No int,
Purchase_Product_ID int FOREIGN KEY REFERENCES Inventory(In_Product_ID),
Purchase_Quantity int NOT NULL,
Purchase_Status varchar(7) NOT NULL,
PRIMARY KEY(Purchase_Order_No, Purchase_Product_ID)
);
这是我的表2:
CREATE TABLE PurchasedDate
(
PD_PO_No int NOT NULL PRIMARY KEY FOREIGN KEY REFERENCES PurchasedProducts(Purchase_Order_No),
PD_Date date NOT NULL
);
我执行第一个表成功,但是当我执行第二个表时它显示此错误消息:
被引用表中没有主键或候选键“购买产品“与外键'FK__Purchased__PD_PO__0B5CAFEA'中的引用列表匹配。
我不是什么问题。请帮帮我!
在PurchasedProducts
表的主键是由两列:
PRIMARY KEY(Purchase_Order_No, Purchase_Product_ID)
这样想引用也必须具有以下确切的两列所有子表:
CREATE TABLE PurchasedDate
(
PD_PO_No int NOT NULL PRIMARY KEY,
Purchase_Product_ID INT NOT NULL,
PD_Date date NOT NULL
);
ALTER TABLE dbo.PurchasedDate
ADD CONSTRAINT FK_PurchaseDate_PurchasedProducts
FOREIGN KEY(PD_PO_No, Purchase_Product_ID)
REFERENCES PurchasedProducts(Purchase_Order_No, Purchase_Product_ID)
A 外键只能引用整个父表的主键 - 你不能引用从父表中的PK中只有2列中有2列。
非常感谢你解释得很好 – 2014-09-25 07:39:10
@kaviraj&marc_s:FOREIGN KEY可以引用任何NOT NULL UNIQUE或PRIMARY KEY列集。而这样一个列集可以包含在更大的列。所以你可以引用PK的2列,只要它是NOT NULL UNIQUE。 SQL NOT NULL UNIQUE和PK实际声明一个超级密钥不一定是候选键,FK实际上声明一个外部超级键不一定是外键。 – philipxy 2014-09-25 23:18:15
@philipxy:表示同意 - 但是如果PK中的那一列已经是唯一的并且不为空 - ***为什么***你有复合PK呢?在这种情况下,单个列将是PK的更好候选者...... – 2014-09-26 05:48:24
很明显,purchase_product_no列不是父表中的主键或唯一键, – radar 2014-09-25 02:20:11
与您的问题无关,但这是一个非常奇怪的数据库设计。更传统的方法是将采购订单表作为其中一个字段。您的purchaseProducts表将具有对其的外键引用。顺便说一句,你的答案在这里。 http://stackoverflow.com/questions/6651667/creating-a-composite-foreign-key-in-sql-server-2008 – 2014-09-25 02:26:47
@Rajesh你能告诉我这是什么意思'PRIMARY KEY(Purchase_Order_No,Purchase_Product_ID)'。我希望Purchase_Order_No,Purchase_Product_ID作为组合键。我想把PD_PO_No作为Purchase_Order_No的外键。这对于我的任务,我是SQL新手请帮忙。 Thankyou – 2014-09-25 02:29:35