2017-11-29 8 views
0

기본적으로 조인 된 테이블을 만드는 데 문제가 있으며이를 수정하는 방법을 모릅니다. 나는 cInfo를 먼저 만든 다음 mInfo를 만들고 eInfo를 모두 만들었지 만 cRented를 만들려고 할 때 오류가 발생했습니다 : Error Code : 1215. 외래 키 제약 조건을 추가 할 수 없습니다. 어떤 도움이 필요합니까? 여기 코드입니다 :에서MYSQL : 오류 코드 : 1215. 외래 키 제약 조건을 추가 할 수 없습니다.

CREATE TABLE cInfo (
cid int(4) DEFAULT '0', 
fname varchar(20) NOT NULL, 
sname varchar(20) NOT NULL, 
age int(4) DEFAULT '0', 
gender enum('M', 'F') NOT NULL DEFAULT 'M', 
telno int(10) DEFAULT '0', 
email varchar(20) NOT NULL, 
addr varchar(50) NOT NULL, 
cowed int(4) NOT NULL DEFAULT '0', 
PRIMARY KEY (cid, cowed) 
); 

INSERT INTO cInfo VALUES(1,'Smith', 'John', 20, 'M', 0891234567, 
'[email protected]', '1 Bishopstown Road, Cork', 10); 


CREATE TABLE mInfo (
mid INT NOT NULL, 
title varchar(100) NOT NULL, 
director varchar(100) NOT NULL, 
relyear int(4) NOT NULL, 
genre enum('Thriller','Horror','Documentary','Comedy','Drama') NOT NULL 
DEFAULT ‘Drama’, 
PRIMARY KEY (mid) 
); 

INSERT INTO mInfo VALUES(1,'Justice League', 'Zack Snyder', 2017, 'Comedy'); 


CREATE TABLE eInfo (
eid int(4) DEFAULT '0', 
ppsn varchar(10) NOT NULL, 
fname varchar(20) NOT NULL, 
sname varchar(20) NOT NULL, 
gender enum(‘M’, ‘F’) NOT NULL DEFAULT ‘M’, 
telno int(10) DEFAULT '0', 
email varchar(100) NOT NULL, 
addr varchar(200) NOT NULL, 
mid INT NOT NULL, 
PRIMARY KEY (mid), 

CONSTRAINT eInfo_ref1 FOREIGN KEY (mid) REFERENCES mInfo (mid) 
); 

INSERT INTO eInfo VALUES(1, '1234567A', 'Moyes', 'Richard', 'M', 0871234567, 
'[email protected]', '1 CIT Road, Cork', 1); 


CREATE TABLE cRented (
cid int(4) DEFAULT '0', 
mid INT NOT NULL, 
dor Date NOT NULL, 
cowed int(4) NOT NULL DEFAULT '0', 
PRIMARY KEY (cid, mid, cowed), 

CONSTRAINT cRented_ref1 FOREIGN KEY (cid) REFERENCES cInfo (cid), 
CONSTRAINT cRented_ref2 FOREIGN KEY (mid) REFERENCES mInfo (mid), 
CONSTRAINT cRented_ref3 FOREIGN KEY (cowed) REFERENCES cInfo (cowed) 
); 

INSERT INTO cRented VALUES(1, 1, 2017-11-23, 10); 
+2

FK는 PK와 일치해야합니다. cInfo에는 PK (cid, cowed)가 있지만 FK는 cid만을 참조합니다. – jarlh

+0

또한 동일한 테이블에 기본 키인 외래 키가 없어야합니다. 'eInfo'에서'mid '가 아닌'eid'를 기본 키로 만들어야합니다. –

+0

@ObsidianAge를 수행 할 수 있습니다. (하지만 아주 흔하지는 않습니다.) – jarlh

답변

0

다음

CONSTRAINT cRented_ref1 FOREIGN KEY (cid) REFERENCES cInfo (cid), 
CONSTRAINT cRented_ref2 FOREIGN KEY (mid) REFERENCES mInfo (mid), 
CONSTRAINT cRented_ref3 FOREIGN KEY (cowed) REFERENCES cInfo (cowed) 

복합 외래 키 cRented_ref1의 찬성 CONSTRAINT cRented_ref3을 제거 :

CONSTRAINT cRented_ref1 FOREIGN KEY (cid, cowed) REFERENCES cInfo (cid, cowed), 
CONSTRAINT cRented_ref2 FOREIGN KEY (mid) REFERENCES mInfo (mid) 

그 방법 cRented_ref1가에 복합 기본 키와 일치 cInfo.

기본 키와 외래 키 제약 조건이 동일한 열을 eInfo와 mInfo의 데이터간에 1 : 1 관계로 나타내지 만 테이블 eInfo는이 경우 문제가되지 않습니다.