2

私はこのテーブルを含むデータベースを持っていますConversionClientこのテーブル間の関係を作成したい
ので、ID_Send in Conversion Reference to Client
in IDと ID_Receive in Conversion Reference to Client in ID

create table Conversion(ID_Send int ,
                        ID_Receive int ,
                        [Time] datetime,
                        [Message] varchar(2048),
                        primary key(ID_Send,ID_Receive,[Time])
                        )

create table Client (ID int IDENTITY(1,1) primary key,
                    [First name] varchar(500) not null,
                    [Last Name]varchar(500) not null,
                    [Birth day] datetime,
                    Gender bit not null,
                    Country  varchar(200)not null,
                    City varchar(200) ,
                    [Language] varchar(200)not null, 
                    [Chat name] varchar(500)not null ,
                    [Password] varchar (500)not null,
                    --foreign key(ID) REFERENCES Conversion (ID_Send)--there is an error 
                    ) 
4

2 に答える 2

2

複合主キー (複数の列で構成される) がある場合、すべての外部キーもPK のすべての列を使用してそのテーブルを参照する必要があります。

結局のところ、子テーブルから親テーブルへの明確で決定論的な参照を行うには、他にどのような方法があるでしょうか? 親テーブルの 1 つの行を一意に識別する列を使用する場合にのみ、これが機能します。

唯一の回避策は、親テーブルの列ID_Sendと列に UNIQUE インデックスを配置し、その一意のインデックスを参照することです。ID_Receive

しかし、問題は次のとおりです。これらの値が一意である場合、なぜこれらの列の 1 つだけが主キーではないのでしょうか??

于 2012-08-20T04:41:28.820 に答える
2

Motazz、クライアントテーブルにあるように、テーブルには主キーが1つしか存在できません。エラーを取り除くには:

最初に Client テーブルを作成し、次に Conversion のコードを次のように置き換えます。

create table Conversion(ID_Send int FOREIGN KEY REFERENCES Client(ID),
                    ID_Receive int FOREIGN KEY REFERENCES Client(ID),
                    [Time] datetime,
                    [Message] varchar(2048),
                    primary key(ID_Send,ID_Receive,[Time])
                    )
于 2012-08-20T04:45:33.327 に答える