2017-11-21 6 views
0

3つのテーブルを接続しようとしています。それらのうちの2つには、第3のものがリンクされることになっている主キーがあります。私はそれが4番目にリンクされているので、これを必要とします(しかし、この作品は大丈夫です)。次のように私が書いたコードは次のとおりです。私は「foriegnキーの不一致エラーが出るよう2つのテーブル間のテーブルのSQLite複合キー

CREATE TABLE CUSTOMERS(
CUSTOMER_ID INT(10) NOT NULL, 
SURNAME CHAR(50) NOT NULL, 
NAME CHAR(50) NOT NULL, 
PRIMARY KEY (CUSTOMER_ID) 
); 

CREATE TABLE WORKSHOP(
WORKSHOP_ID INT(10) NOT NULL, 
NAME CHAR(100) NOT NULL, 
CHAIN_NAME CHAR(100), 
CHAIN_ID INT(10), 
CONTRACT_WORKSHOP CHAR(5) NOT NULL, 
PRIMARY KEY (WORKSHOP_ID, CHAIN_ID) 
); 

CREATE TABLE CAR_DAMAGE(
DAMAGE_ID INT(10) NOT NULL, 
CUSTOMER_ID INT(10) NOT NULL, 
DATE INT(20) NOT NULL, 
PLACE CHAR(128) NOT NULL, 
WORKSHOP_ID INT(10) NOT NULL, 
PRIMARY KEY (DAMAGE_ID, CUSTOMER_ID, WORKSHOP_ID, DATE, PLACE), 
FOREIGN KEY (CUSTOMER_ID) REFERENCES CUSTOMERS (CUSTOMER_ID), 
FOREIGN KEY (WORKSHOP_ID) REFERENCES WORKSHOP (WORKSHOP_ID) 
); 


INSERT INTO CUSTOMERS VALUES (1, "OLSEN", "TROND"); 
INSERT INTO CUSTOMERS VALUES (2, "JOHNSEN", "FELIX"); 
INSERT INTO CUSTOMERS VALUES (3, "SVINDAL", "AKSEL"); 
INSERT INTO CUSTOMERS VALUES (4, "BJORGEN", "MARIT"); 
INSERT INTO CUSTOMERS VALUES (5, "SVENDSON", "LISA"); 

INSERT INTO WORKSHOP VALUES (1, "BERTEL", "MOLLER", 1, "YES"); 
INSERT INTO WORKSHOP VALUES (2, "OLOF", "OLOF AUTO", 3, "NO"); 
INSERT INTO WORKSHOP VALUES (3, "J-AUTO", "MOLLER", 1, "YES"); 
INSERT INTO WORKSHOP VALUES (4, "SPEED", "BIRGER N. HAUG", 2, "YES"); 
INSERT INTO WORKSHOP VALUES (5, "RELAX AUTO", "MOLLER", 1, "YES"); 

INSERT INTO CAR_DAMAGE VALUES (1, 1, 10102008, "HELLERUD", 1); 
INSERT INTO CAR_DAMAGE VALUES (2, 2, 14032015, "JAR", 2); 
INSERT INTO CAR_DAMAGE VALUES (3, 3, 24052016, "LOMMEDALEN", 3); 
INSERT INTO CAR_DAMAGE VALUES (4, 4, 31102017, "FLAKTVEIT", 4); 
INSERT INTO CAR_DAMAGE VALUES (5, 5, 08062016, "STOCKHOLM", 5); 

はしかし、問題が発生 - CAR_DAMAGE参照WORKSHOP

私はそれを使用するように強制していますように私はSQLiteのを使用しています、私の大学によって与えられた。

答えて

1

WORKSHOPは複合主キー(WORKSHOP_ID, CHAIN_ID)を持っている。そのテーブルを参照する外部キーが同じ2つのフィールドからなる複合外部キー、でなければならない。そのため、あなたがテーブルWORKSHOPCHAIN_IDを追加する必要があります外部キーを変更する以下のようなものに宣言:

FOREIGN KEY (WORKSHOP_ID, CHAIN_ID) REFERENCES WORKSHOP (WORKSHOP_ID, CHAIN_ID) 

[より一般的には、あなたの主キーは、彼らが必要以上に多くの複雑な与えられた情報に基づいて、ように見える:なぜちょうどCAR_DAMAGEのPKとしてWORKSHOPDAMAGE_IDのPKとしてWORKSHOP_IDを持っていません?しかし、たぶんあなたには良い理由があります。]

0

ありがとう。このメソッドは機能しました。したがって、私が進んだときに、新しい問題が発生しました。

CREATE TABLE DAMAGE_INFORMATION(
DAMAGE_ID INT(10) NOT NULL, 
DAMAGE_TYPE CHAR(100) NOT NULL, 
DAMAGE_SIZE CHAR(50) NOT NULL, 
SPEND INT(10) NOT NULL, 
FOREIGN KEY (DAMAGE_ID) REFERENCES CAR_DAMAGE (DAMAGE_ID) 
); 

そして、私は以前、すなわち外部キーの不一致「DAMAGE_INFORMATION」参照「CAR_DAMAGE」と同じエラーが表示されます。テーブルのCAR_DAMAGEは、コードでは、(DAMAGE_INFORMATION呼び出さ)第4テーブルにリンクされています。

異なるプライマリキーを使用して3つのテーブルを1つに組み合わせることはできませんか? CAR_DAMAGEの主キーは次のとおりです。

PRIMARY KEY(DAMAGE_KEY、CUSTOMER_ID、WORKSHOP_ID)

+0

私はあなたの質問に答えた場合は、その答えを受け入れてください。ありがとうございました。 – RafG

+0

ここで見ている問題は同じです。主キーと外部キーの不一致です。正しい外部キー宣言が何であるかを言うのは難しい:CAR_DAMAGEのPKとしてここに書いたものは元の質問とは異なっており、どちらが正しいかわからない。 – RafG

関連する問題