2017-11-21 6 views
0

세 개의 테이블을 연결하려고합니다. 그 중 두 개는 세 번째가 연결해야하는 기본 키를 가지고 있습니다. 네 번째에 링크되어 있으므로이 사이가 필요합니다 (하지만이 잘 작동합니다). 다음과 같이 내가 작성한 코드는 다음과 같습니다. 내가 "foriegn 키 불일치 오류를 얻을로두 테이블 간의 테이블에 대한 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)이있다. 그 테이블을 참조하는 모든 외래 키가 복합 외부 키해야합니다 같은 두 개의 필드로 구성. 따라서, 당신은 테이블 WORKSHOPCHAIN_ID를 추가해야 외래 키를 변경하십시오. 같은 뭔가를 선언 :

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

[더 일반적으로, 기본 키는 주어진 정보, 그들이해야보다 더 복잡한 기반으로 보인다 : 왜 그냥 CAR_DAMAGE을의 PK로 WORKSHOP의 PK로 WORKSHOP_IDDAMAGE_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 호출) 네 번째 테이블에 연결된다.

다른 기본 키를 사용하여 3 개의 테이블을 1로 조합 할 수 있습니까? CAR_DAMAGE의 기본 키는 : 나는 당신의 질문에 대답하는 경우

PRIMARY KEY (DAMAGE_KEY, CUSTOMER_ID, WORKSHOP_ID가)

+0

, 다음 대답을 받아주십시오. 고맙습니다. – RafG

+0

여기서 볼 수있는 문제는 기본 키와 외래 키가 일치하지 않습니다. 올바른 외래 키 선언이 무엇인지 밝히기가 어렵습니다. CAR_DAMAGE의 PK가 원래 질문과 다른 것으로 여기에서 작성한 것은 무엇이며 올바른 것은 무엇인지 모르겠습니다. – RafG