2017-11-26 9 views
0

학교 프로젝트를 위해 데이터베이스 프로젝트를 만들고 있습니다. 특정 테이블 중 하나는 기본 키의 한 열 이외의 외래 키입니다. 나는 모든 유형의 값을 INSERT INTO 할 때 나는 오류 메시지 :외부 키 및 부모 키 정의

--Insert failed for rows 1 through 50 
--ORA-02291: integrity constraint (112ZACCARO.SYS_C0013505) violated - parent key not found 

그 제약 조건은 Helmet 열입니다. PArmorOptions의 기본 키를 참조하는 방법을 알아야합니다. 다음과 같은 방식으로 모든 기본 키와 외래 키를 설정 했으므로 기본 키를 PCharacterBuilds으로 표시 할 필요가 없다고 생각합니다.

ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (ClassName) REFERENCES PClasses(ClassName); 
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (Helmet) REFERENCES PArmorOptions(OptName); 
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (Chestpiece) REFERENCES PArmorOptions(OptName); 
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (Gauntlets) REFERENCES PArmorOptions(OptName); 
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (LegArmor) REFERENCES PArmorOptions(OptName); 
ALTER TABLE PCharacterBuilds ADD FOREIGN KEY (Boots) REFERENCES PArmorOptions(OptName); 

PArmorOptions

CREATE TABLE PArmorOptions 
(
    OptName NVARCHAR2(50), 
    Rarity NVARCHAR2(20), 
    ArmorMaterial NVARCHAR2(20) 
); 

ALTER TABLE PArmorOptions ADD PRIMARY KEY (OptName); 
ALTER TABLE PArmorOptions ADD FOREIGN KEY (MaterialID) REFERENCES PArmorType(MaterialID); 
+0

오류 메시지는'Helmet' 필드에 대한 값을 삽입하려고하고 있는데,'PArmorOptions'에서 기본 키로 찾을 수 없습니다. – Elyasin

+0

제한 조건 평가 시간을 점검하십시오. 동사 시간 -vs- 헌신 시간? – McMurphy

+0

@Elyasin yea, 위의'alter table' 문으로 PK를 선언 했으므로 일치하지 않을 이유가 확실하지 않습니다. – mzaccaro89

답변

2

PCharacterBuilds 테이블에 대한 INSERT 문은 다음과 같이 표시 될 수 있습니다

insert into PCharacterBuilds (ClassName,Helmet,Chestpiece,Gauntlets,LegArmor,Boots) 
values ('RANGER', 'MORION', 'CHAINMAIL', 'LEATHER', 'LEATHER', 'HOBNAILED'); 
외래 키의 목적은 보장하는 것입니다

그 자식 테이블의 레코드 허용되는 값만 포함하십시오. PArmorOptions의 기본 키는 OptName입니다. 위 문장이 작동하려면 PArmorOptions에 5 개의 레코드가 필요합니다. 'MORION', 'CHAINMAIL', 'LEATHER', 'LEATHER'및 'HOBNAILED'각각에 하나씩 있습니다. 마찬가지로 PClassesClassName = 'RANGER'라는 레코드가 있어야합니다.

문자열 키이므로 삽입 된 값은 과 정확히 일치해야합니다. 즉, : 경우와 같이 맞춤법, 공백 등이 일치해야합니다. 해당 레코드가 부모 테이블에 존재하지 않기 때문에 ORA-02291이 표시됩니다. 레코드가 전혀 없거나 값이 다릅니다.

+0

네, 고맙습니다. – mzaccaro89

+1

그렇다면 실제 질문은 무엇입니까 ??? – APC

+0

내 실제 질문은 "외래 키가 실제로 PArmorOptions 테이블의 데이터를 참조 할 수 있도록 다른 방법으로 기본 키를 정의하는 방법이 다른 것입니까?" – mzaccaro89