이것은 내 코드의 샘플입니다. 나는 테이블 AF_FDO을 만들려고 할 때까지 2008 R2외래 키의 복합 기본 키
create table Entidade(
NIF numeric(9,0) primary key,
nome varchar(250) not null,
tipoEnt varchar(4) check (tipoEnt in ('CE','EC','CEEC',null))
)
create table Curso(
cod int primary key identity(1,1),
descricao text,
nHoras decimal(5,2),
NIFEnt numeric(9,0) references Entidade(NIF),
)
create table AccaoFormacao(
ref int identity(1,1) not null,
codCr int references Curso(cod) not null,
dtInicio date,
dtFim date,
BIFDR numeric(8,0) references Formador(BI),
constraint pkAccaoFormacao primary key(ref, codCr),
)
create table AF_FDO(
codCr int,
refAf int,
BI numeric(8,0) foreign key references Formando(BI),
constraint fkAF_FDO foreign key(codCr, refAf) references AccaoFormacao(codCr, ref),
constraint pkAF_FDO primary key(codCr, refAf, BI)
)
모든 것이 잘 간다 SQL Server를 사용하고, 그것은 말한다 : "메시지 1776, 수준 16, 상태 0, 줄 1 더 기본 또는 후보 없습니다 외래 키 'fkAF_FDO'의 참조 열 목록과 일치하는 참조 된 테이블 'AccaoFormacao'의 키. "
메시지를 이해할 수 있지만 pkAccaoFormacao 제약 조건에서 기본 키를 선언하고있어 문제를 해결하는 방법을 알 수 없습니다.
AccaoFormacao (codCr, ref)의 고유 제한 조건이 작동하지만 동시에 여기에서 내가하는 일에 "적합하지"않습니다. AccaoFormacao는 Curso의 약한 개체이므로 AccaoFormacao에 복합 기본 키가 있습니다.
EDIT1 : 시간이 지나면 알아 냈습니다. 나는 어리 석다. 제약 조건 fkAF_FDO 외래 키 (codCr, refAf)가 AF_FDO에서 AccaoFormacao (codCr, ref)를 참조하여 제약 fkAF_FDO 외래 키 (codCr, refAf)가 AccaoFormacao를 참조하고 작동합니다. AccaoFormacao의 복합 기본 키를 가져야합니다. 다른 방법으로도 작동해야합니다 ...
어쨌든 도움을 주셔서 감사합니다.
숫자 (9,0) 기본 키? 그건 좋은 선택이 아닌 것 같습니다 .... –
그건 내 문제의 원인으로 보이지 않습니다. 숫자를 사용하는 이유는 해당 키의 숫자 (예 : 신용 카드 번호)를 제한하기 때문입니다. – user8022070
그런 말은하지 않았습니다. 나는 그것이 좋은 디자인이 아니라고 지적했다. 가져 가든지 남겨 두든지. –