これは私のコードのサンプルです。SQL Server 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)
)
テーブル AF_FDO を作成しようとするまで、すべてうまくいきます。「メッセージ 1776、レベル 16、状態 0、行 1 参照されるテーブル 'AccaoFormacao' には、外部の参照列リストと一致する主キーまたは候補キーはありません。キー 'fkAF_FDO'."
メッセージは理解できますが、制約 pkAccaoFormacao で主キーを宣言しているため、それを修正する方法がわかりません。意味がありません。
AccaoFormacao(codCr, ref) の一意の制約は機能しますが、同時に、ここで行っていることには「適合」しません。AccaoFormacao は Curso の弱いエンティティであるため、AccaoFormacao に複合主キーがあります。
EDIT1:わかりました、何時間も経った後、私は愚かだと感じました。AF_FDO の制約 fkAF_FDO 外部キー(codCr, refAf) 参照 AccaoFormacao(codCr, ref) を制約 fkAF_FDO 外部キー(codCr, refAf) 参照 AccaoFormacao に変更したところ、機能しました。AccaoFormacao の複合主キーを取得しますが、他の方法でも機能するはずです...
とにかく助けてくれてありがとう。