2016-09-27 67 views
0

我創建一個頁面下表:嘗試爲SQL中的表創建外鍵時出錯?

CREATE TABLE SCREEN(
BRANCHID CHAR(2) NOT NULL, 
SCREENID CHAR(2) NOT NULL, 
SCREENCACPACITY NUMBER(3), 
CONSTRAINT SCREEN_PK PRIMARY KEY(BRANCHID, SCREENID), 
CONSTRAINT SCREEN_FK FOREIGN KEY(BRANCHID) REFERENCES BRANCH(BRANCHID)); 

但是,當我創建一個會話表:

CREATE TABLE SESSIONS(
SESSIONID CHAR(4) NOT NULL, 
BRANCHID CHAR(2) NOT NULL, 
SCREENID CHAR(2) NOT NULL, 
MOVIEID CHAR(2) NOT NULL, 
SESSIONDATE DATE, 
SESSIONPRICE NUMBER(4,2), 
CONSTRAINT SESSIONS_PK PRIMARY KEY(SESSIONID), 
CONSTRAINT SESSIONS_FK1 FOREIGN KEY(BRANCHID) REFERENCES BRANCH(BRANCHID), 
CONSTRAINT SESSIONS_FK2 FOREIGN KEY(SCREENID) REFERENCES SCREEN(SCREENID), 
CONSTRAINT SESSIONS_FK3 FOREIGN KEY(MOVIEID) REFERENCES MOVIE(MOVIEID)); 

我得到一個「此列列表中沒有匹配的唯一或主鍵」錯誤。我知道這個錯誤與Screen表格有關,因爲我已經嘗試了所有的外鍵,並且Screen是唯一一個給我錯誤的人。所以,當我嘗試運行完整的腳本時,由於屏幕,它不起作用。

分支和電影屏幕已經制作出來,與屏幕差不多。幫助pl0x

+0

相對於您向我們顯示的兩個CREATE TABLE語句,創建了BRANCHES表嗎? –

+0

@TimBiegeleisen這是第一個創建的 –

回答

0

大多數(如果不是全部的話)支持外鍵的SQL風格將強制您將外鍵指向整個主鍵。在你的情況下,表格SCREEN有(BRANCHID,SCREENID)作爲PK,但是你的SESSIONS_FK2 FK只能指向SCREENID。

您應該創建一個指定兩列的外鍵。類似:

CONSTRAINT FK_SESSION_SCREEN FOREIGN KEY (BRANCHID, SCREENID) REFERENCES SCREEN(BRANCHID, SCREENID) 

其它需要考慮的事項:

1)如果你的目標進行歸一化,也許分支和屏幕應該分開(因此,具有用於每個單個列主鍵)

2)用有意義的名字命名你的約束,以便你直接理解他們做了什麼。

+0

這似乎工作,謝謝。我謹記這些提示,謝謝。 –

0


Hi Rob,<>這裏在Session表中已經定義了外鍵,但是在父表中.i.e,在屏幕表中沒有關心主鍵。請檢查其他表是否有主鍵約束。

0

如您在CONSTRAINT SESSIONS_FK2 FOREIGN KEY(SCREENID)中提到的,SCREENID不是唯一或主鍵的事實不能讓您將其設爲外鍵。

因此,您需要將SCREENID設置爲表格SCREEN的PRIMARY KEY。

+0

我有,它與BRANCHID的合成,還是不是你的意思? –