2017-10-24 6 views
0

'고객'테이블의 외래 키로 기본 키 인 '주소'테이블의 '우편 번호'를 사용하고 싶습니다. 나는 '고객'테이블의 외래 키로 렌털 테이블에서 'RentalID'를 가져 오는 것과 동일한 작업을 수행했지만 'Postcode'에 대해 동일한 작업을 수행하면이 오류가 발생합니다. "외래 키 제약 조건을 확인하십시오. 부모 테이블 주소에 대한 테이블 고객 "입니다.SQL의 외래 키 사용

CREATE TABLE rentals 
(RentalID INTEGER PRIMARY KEY, CarRegistration TEXT, DateHired TEXT, 
DateReturned TEXT); 

INSERT INTO rentals VALUES ( 1, "J986NDX", "12.2.94", "25.8.94"); 
INSERT INTO rentals VALUES ( 2, "K788NRT", "1.3.95", "1.4.96"); 
INSERT INTO rentals VALUES ( 3, "L346NDS", "2.4.96", ""); 
INSERT INTO rentals VALUES ( 4, "J986NDX", "15.9.94", "14.9.95"); 
INSERT INTO rentals VALUES ( 5, "M411NGT", "15.9.95", "1.2.96"); 

CREATE TABLE customers (CustomerID INTEGER, CustomerSurname TEXT, 
Customerinitial TEXT, Companyname TEXT, Postcode TEXT, RentalID INTEGER , 
PRIMARY KEY(CustomerID, RentalID), FOREIGN KEY (RentalID) REFERENCES 
rentals(RentalID), FOREIGN KEY (Postcode) REFERENCES address(Postcode)); 

INSERT INTO customers VALUES (153, "Nazarali", "N", "MF Plastics", "DB5 
3ER", 1); 
INSERT INTO customers VALUES (153, "Nazarali", "N", "MF Plastics", "DB5 
3ER", 2); 
INSERT INTO customers VALUES (187, "Brown", "L", "MF Plastics", "DB5 3ER", 
3); INSERT INTO customers VALUES (287, "Pinner", "M", "Took Ltd", "DB6 
8YU", 4); INSERT INTO customers VALUES (287, "Pinner", "M", "Took Ltd", 
"DB6 8YU", 5); 

CREATE TABLE address (Postcode TEXT PRIMARY KEY, town TEXT); 
INSERT INTO address VALUES ("DB5 3ER", "Derby"); 
INSERT INTO address VALUES ("DB6 8YU", "Derby"); 

어떻게 이런 일이 해결 될 수있다 :

내 코드는 내가 khanacademy.org 여기

에 온라인 SQLite는 IDE를 사용하고 있습니다?

+0

주소 세부 정보를 기본 키로 사용하는 것은 좋지 않습니다. 사람들이 같은 주소를 가지고있을 때 어떻게됩니까? 이 데이터는 고유하지 않습니다 –

+0

@ RyanGadsdon 실제로 주소 테이블의 기본 키로 우편 번호를 사용하기 때문에 도시가 변경되지 않으므로 각 우편 번호로 도시를 매핑합니다. 예를 들어, "DB5 3ER"라는 우편 번호는 항상 "Derby", 즉 "DB"에 속합니다. 고객의 주소가 필요하기 때문에 외래 키로 가져오고 싶지만 마을과 우편 번호는 도시가 우편 번호에서 파생 될 수 있으므로 3 번째 정규화 된 형식이 아니기 때문에 기본적으로 반복되는 데이터이므로 나는 우편 번호와 마을을위한 별도의 테이블을 만들었다. –

답변

0

기본적으로 주소 테이블을 만들면 고객 테이블을 만들기 전에 우편 번호 값을 만들 수 있습니다. 현재 존재하지 않는 외래 키를 가질 수 없으므로 아무 것도 없을 것입니다. 제약 조건. 부모 테이블은 고객 테이블보다 먼저 만들어야합니다.

0

외래 키가 해당 테이블의 기본 키인 외부 테이블에 데이터가 이미 삽입 된 경우 외래 키가 작동합니다. 하위 쿼리를 수행하십시오 (insert 문 안쪽에 삽입하십시오)