-1

これは私のコードのサンプルです。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 の複合主キーを取得しますが、他の方法でも機能するはずです...

とにかく助けてくれてありがとう。

4

1 に答える 1