0

は私がEMP1とEMP2を持つテーブルを持っているOracleの2つの列を持つ主キー?

EMP1:

emp_1 | emp_2 
1  | 2 
3  | 4 
5  | 6 

EMP2:

私はテーブルのEMP1とEMP2への外部キーに主キーを設定しようとした
emp 
1 
2 
3 
6 

alter table emp1 add primary key(emp_1,emp_2); 

外部キーの場合:

alter table emp2 
add foreign key (emp) 
references a_t1(emp_1,emp_2); 

エラー:親切

Error report - 
SQL Error: ORA-02256: number of referencing columns must match referenced  columns 
02256. 00000 - "number of referencing columns must match referenced columns" 
*Cause: The number of columns in the foreign-key referencing list is not 
     equal to the number of columns in the referenced list. 
*Action: Make sure that the referencing columns match the referenced 
     columns. 

このエラーを解決するために私を助けると

マイコード:主キーの

主キーを設定します。

+0

1つのフィールドから2つのフィールドに外部キーを追加しようとしています。テーブルEMP2の値がテーブルEMP1の列emp_1またはemp_2のレコードと一致する必要があるかどうかを判断する必要があります。 – Aleksej

+1

FKは、複合PKの一部、または2つの別個の鍵(PKまたはUK)のいずれかを参照することはできません。たとえば、値(7,8)と値(8,9)を持つemp1の行があり、値(8)のemp2の行が必要だったとしたら、どうなるでしょうか?親のどの列がそれを参照していますか? –

+0

yeh私はそれを得た。複合主キーを作成しようとしていました。 – user5505661

答えて

1

私がそれを行うと考えることができる唯一の方法は、マテリアライズドビューを含む厄介なハックです。 2つの列にプライマリキーを分散させないようにデータを修正する方がよいでしょう。

CREATE TABLE EMP1 (
    EMP_1 INT UNIQUE, 
    EMP_2 INT UNIQUE, 
    PRIMARY KEY (EMP_1,EMP_2) 
); 

CREATE MATERIALIZED VIEW LOG ON EMP1 
    WITH SEQUENCE, ROWID(EMP_1, EMP_2) 
    INCLUDING NEW VALUES; 

CREATE MATERIALIZED VIEW EMP1_MV 
    BUILD IMMEDIATE 
    REFRESH FAST ON COMMIT 
    AS SELECT EMP_1 AS EMP 
     FROM EMP1 
     UNION ALL 
     SELECT EMP_2 
     FROM EMP1; 

ALTER TABLE EMP1_MV ADD CONSTRAINT EMP1_MV__PK PRIMARY KEY (EMP); 

CREATE TABLE EMP2 (
    EMP INT PRIMARY KEY REFERENCES EMP1_MV(EMP) 
); 
+0

ありがとう、私はコンセプトを得ました。マテリアライズド・ビューで試してみます。 – user5505661