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,我认为我已经用我的 FOREIGN KEY 约束完成了。我确实将约束更改tableC为:

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

但是在查询数据库时,我发现它没有使用intersectionTable我需要的复合键。

任何帮助都是极好的。

干杯!

4

1 回答 1

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)
    )
    ;
于 2013-04-13T15:34:37.577 回答