2017-11-23 15 views
0

誰でもそのエラーで私を助けることができますか?参照列のSQLクエリの外部キーエラー

数が参照される列に一致しなければなりません

CONSTRAINT a_id FOREIGN KEY(A_id) REFERENCES PAINTING 
                * 

私のクエリは以下の通りです:

CREATE TABLE ARTIST 
(
    A_id NUMBER(10) NOT NULL PRIMARY KEY , 
    Name VARCHAR2(50) , 
    DOB NUMBER(10) , 
    DOD NUMBER(10) , 
    Nationality VARCHAR2(50) , 
     CONSTRAINT a_id FOREIGN KEY(A_id) REFERENCES PAINTING 
); 


CREATE TABLE PAINTING 
(
    P_id NUMBER(10) NOT NULL, 
    Title NUMBER(10) , 
    Value NUMBER(10) , 
    Aquisition_date DATE NOT NULL, 
    Insurance_value NUMBER(10), 
CONSTRAINT prim_key PRIMARY KEY(P_id, Aquisition_date), 
CONSTRAINT fk1 FOREIGN KEY (P_id) REFERENCES IN_GALLERY, 
    CONSTRAINT fk2 FOREIGN KEY (P_id) REFERENCES ON_LOAN, 
    CONSTRAINT fk3 FOREIGN KEY (P_id) REFERENCES OWNER_HISTORY 
); 
+0

構文を修正しても、データモデルは意味をなさない。 –

+0

MySQLはNUMBERまたはVARCHAR2データ型をサポートしていません。使用している正しいデータベースにタグを付けてください。あなたはSQLサーバーを使用しています。 –

+0

端末からのSQL * Plus! –

答えて

0

外部キーは、主キーだけでなく、部分的な列を参照する必要があります。

表PAINTINGには、A_idとAquisition_dateに複合主キーがあります。これを試して。それは動作するはずです。

CREATE TABLE PAINTING 
(
    P_id NUMBER(10) NOT NULL, 
    Title NUMBER(10) , 
    Value NUMBER(10) , 
    Aquisition_date DATE NOT NULL, 
    Insurance_value NUMBER(10), 
CONSTRAINT prim_key PRIMARY KEY(P_id, Aquisition_date) 
); 





CREATE TABLE ARTIST 
(
    A_id NUMBER(10) NOT NULL PRIMARY KEY , 
    Name VARCHAR2(50) , 
    DOB NUMBER(10) , 
    DOD NUMBER(10) , 
    Nationality VARCHAR2(50) , 
    p_id NUMBER, 
    Aquisition_date DATE, 
    CONSTRAINT fk_painting FOREIGN KEY(P_id, Aquisition_date) REFERENCES PAINTING 
); 

他のテーブルの制約を削除しました。必要に応じてそれらを追加してください。

+0

私は質問がありました。私は外部キーを作成するとき、私はまた、参照であるテーブルの属性を作成する必要がありますか? –

+0

はい、そうです。 – Ramesh

+0

もう一度、「ORA-02253:制約の指定が許可されていません」などのエラーが発生した場合はどうすればよいですか? –

関連する問題