2013-04-13 48 views
2

我有四個表,其中2個是獨立的實體,一個將這兩個鏈接在一起的交集實體和第三個引用交集實體的表。下面是我有什麼結構:將交集實體中的組合外鍵用作主鍵?

CREATE TABLE tableA (
    primaryKeyA number(4) , 
    PRIMARY KEY (primaryKeyA)); 

CREATE TABLE tableB (
    primaryKeyB number(4) , 
    PRIMARY KEY(primaryKeyB)); 

CREATE TABLE intersectionTable (
    primaryKeyA number(4) , 
    primaryKeyB number(4) , 
    FOREIGN KEY (primaryKeyA) REFERENCES tableA , 
    FOREIGN KEY (primaryKeyB) REFERENCES tableB , 
    PRIMARY KEY (primaryKeyA, primaryKeyB)); 

CREATE TABLE tableC (
    primaryKeyC number(4) , 
    primaryKeyA number(4) , 
    primaryKeyB number(4) , 
    FOREIGN KEY (primaryKeyA) REFERENCES intersectionTable , 
    FOREIGN KEY (primaryKeyB) REFERENCES intersectionTable , 
    PRIMARY KEY (primaryKeyA, primaryKeyB, primaryKeyC)); 

的問題是,每次我創建tableC時間我收到從Oracle以下錯誤:

ORA-02256:引用的列數必須匹配引用的列

我需要確保tableC可以引用複合鍵intersectionTable,我以爲我已經和我的外國KEY約束來完成。我沒有改變約束tableC到:

FOREIGN KEY (primaryKeyA) REFERENCES tableA , 
FOREIGN KEY (primaryKeyB) REFERENCES tableB , 

但是在查詢的數據庫,我發現,它並沒有利用intersectionTable創建的複合鍵,這是需要我的。

任何幫助都會很棒。

乾杯!

回答

3
CREATE TABLE tableC 
    (primaryKeyC number(4) 
    , primaryKeyA number(4) 
    , primaryKeyB number(4) 
    , FOREIGN KEY (primaryKeyA,primaryKeyB) 
      REFERENCES intersectionTable (primaryKeyA,primaryKeyB) 
    , PRIMARY KEY (primaryKeyA, primaryKeyB, primaryKeyC) 
    ) 
    ;