2

SQL Server2008を使用しています。テーブル'Dossier_Financement'を作成しようとすると、エラーが発生します。

create table Dossier_Financement 
(
    ID_Reunion integer foreign key references Reunion(ID_Reunion),
    ID_Dossier integer foreign key references Dossier(ID_Dossier),
    Decision varchar(20),
    Motif text,
    Montant_Retenu decimal(6,2),/* montant accorder */
    Duree_Retenu smallint,/*nb jours accorder */
    Nom_Giac varchar(50) foreign key references GIAC(Nom_Giac),
    primary key(ID_Dossier,Nom_Giac,ID_Reunion)
)
GO

これらは2つのテーブルです:

create table Reunion 
(
    ID_Reunion integer ,
    Date_Reunion datetime,
    ID_Membre integer,/*jquery*/
    Type_Reunion varchar(20),
    Nom_Giac varchar(50),
    foreign key(ID_Membre,Nom_Giac) references Membre(ID_Membre,Nom_Giac),
    primary key(ID_Reunion,Nom_Giac)
)
GO


create table Dossier_Financement 
(
    ID_Reunion integer foreign key references Reunion(ID_Reunion),
    ID_Dossier integer foreign key references Dossier(ID_Dossier),
    Decision varchar(20),
    Motif text,
    Montant_Retenu decimal(6,2),/* montant accorder */
    Duree_Retenu smallint,/*nb jours accorder */
    Nom_Giac varchar(50) foreign key references GIAC(Nom_Giac),
    primary key(ID_Dossier,Nom_Giac,ID_Reunion)
)
GO

'Reunion'は問題なく正常に実行されますが、2番目のテーブルを作成しようとすると次のエラーが発生します。

Msg 1776, Level 16, State 0, Line 1
There are no primary or candidate keys in the referenced table 'Reunion' that match the referencing column list in the foreign key 'FK__Dossier_F__ID_Re__5629CD9C'.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.
4

3 に答える 3

4

実際のモデルのニーズ/要件に応じて、1つの解決策は、すべてのNom_Giacパーツを必要とするキーを参照することです( FK定義に追加されることに注意してください)。

create table Dossier_Financement 
(
    ...
    foreign key(ID_Reunion,Nom_Giac) references Reunion(ID_Reunion,Nom_Giac),
)

Mark Mの答えによると、別の解決策は、ID_Reunion列をキーにすることです(Nom_GiacPK定義から削除されていることに注意してください)。

create table Reunion 
(
    ...
    primary key(ID_Reunion)
)

これにより、ID_Reunionがキー(実際には主キー)になり、。で参照できるようになりますforeign key references Reunion(ID_Reunion)

ハッピーコーディング!

于 2012-05-25T01:23:46.833 に答える
3

参照しているテーブルの完全な主キーを使用してのみ、外部キーを作成できます。2番目のテーブルは、Reunionテーブルの主キーの半分だけを使用して外部キーを作成しようとします。

于 2012-05-25T01:02:43.027 に答える
2

インデックスを作成する列に一意のインデックスを作成します。

CREATE UNIQUE NONCLUSTERED INDEX [UX_Index] ON dbo.[Table]([Column1],[Column2])
于 2012-12-12T16:05:30.170 に答える