2013-01-05 107 views
2

我正在構建我的一個數據庫的模式。我有兩個下面的表...來自多個表的複合外鍵

CREATE TABLE User(
userID INT AUTO_INCREMENT, 
... 
PRIMARY KEY(userID) 
); 

CREATE TABLE Tool(
toolID INT AUTO_INCREMENT, 
... 
PRIMARY KEY(toolID) 
) 

我想創建一個名爲hasTool的表,它有兩個使用外鍵約束的表的主鍵。但是,除此之外,我希望使這兩個字段成爲新表hasTool的組合鍵。我曾嘗試以下,但它似乎並沒有產生預期的行爲:

CREATE TABLE gcHasCoordinates (
userID INT NOT NULL, 
toolID INT NOT NULL, 
PRIMARY KEY (userID , toolID), 
CONSTRAINT foreign_key_to_User FOREIGN KEY (userID) REFERENCES Coordinate(coordinateID) , 
CONSTRAINT foreign_key_to_Tool FOREIGN KEY (toolID) REFERENCES Tool(toolID) 
); 

我想允許表中,以便用戶ID或toolID的多個實例,但不能同時和兩個被現有的值表用戶和工具。

在此先感謝!

+1

這應該是正確的,除了你引用了錯誤的表名'REFERENCES User(userID)'和'REFERENCES Tool(toolID)' –

回答

0

這是什麼問題?

除了

CONSTRAINT foreign_key_to_Tool FOREIGN KEY (toolID) REFERENCES Tool(toolID) ON DELETE CASCADE ON UPDATE CASCADE 

當你引用不正確的表藏寶,而不是工具。它應該工作,我認爲。

編輯:下面看看this

+0

我很抱歉,那是一個錯字。我正在編輯這篇文章,但底層查詢是一致的。 – user625665

+0

哦!但你沒有回答什麼是錯的。我在小提琴中創建了自己的桌子,你可以查看它。 –

+0

謝謝!出於某種原因,只有在兩個字段中都添加INDEX的情況下才有效。我不知道爲什麼,但它現在工作:) – user625665

0

也許,你shold使用相同的數據類型。 INTINT NOT NULL是不同的類型