私は3つのテーブルをtableA、tableB、tableCとしましょう。これらのテーブルの 関係船は、以下のとおりです。SQL論理キー
- TABLEB 1ににtableA多くにそれぞれ
- TABLEC 1にTABLEB多くにそれぞれ
にtableA:
CREATE TABLE tableA (
id int Not Null,
name varchar(50) Not Null,
Area varchar(20) Not Null,
CONSTRAINT PK_tableA PRIMARY KEY NONCLUSTERED(id Asc) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90)
)
TABLEB:
CREATE TABLE tableB (
id int Not Null,
appNbr int NOT NULL,
appCode char(8) NOT NULL,
tableAId int Not Null,
beginDt datetime Not Null,
EndDt datetime Not Null,
updatedDt datetime Not Null,
CONSTRAINT PK_tableB PRIMARY KEY NONCLUSTERED(
id Asc,
appNbr ASC,
appCode ASC,
tableAid ASC,
beginDt ASC,
endDt ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90)
)
GO
ALTER TABLE tableB WITH CHECK ADD CONSTRAINT FK_tableB_tableAId FOREIGN KEY(tableAId)
REFERENCES tableA (Id)
GO
ALTER TABLE tableB CHECK CONSTRAINT FK_tableB_tableAId
GO
TABLEC:
CREATE TABLE tableC (
id int Not Null,
tableBId int Not Null,
beginDt datetime Not Null,
endDt datetime Not Null,
indicator char(1) Not Null,
contactId int Not Null
UpdateDt datetime Not Null,
CONSTRAINT PK_tableC PRIMARY KEY NONCLUSTERED(
id ASC,
tableBId Asc,
beginDt ASC,
endDt ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90)
)
ALTER TABLE tableC WITH CHECK ADD CONSTRAINT FK_tableC_tableBId FOREIGN KEY(tableBId)
REFERENCES tableB (Id)
GO
ALTER TABLE tableC CHECK CONSTRAINT FK_tableC_tableBId
GO
ここでの問題は、上の研究の後、私は、テーブルCを作成するスクリプトを実行すると、それは
There are no primary or candidate keys in the referenced table
'dbo.tableB' that match the referencing column list in the
foreign key 'FK_tableC_tableBId'.
Msg 1750, Level 16, State 0, Line 2
Could not create constraint. See previous errors.
以下のようなエラーを示していますグーグル私はコンポジットプライマリキーからforiegnキーを作成することは許可されていないことを知りに来た。だから、私は私の主キーと残りのフィールド(appNbr、appCode、tableAid、beginDtとendDt)のIDをテーブルBの論理キーにすることにしました。私は論理キーについていくつかのオンライン資料を読みましたが、理解することはできません。
論理キーとは何ですか、私の例ではどのように使用できますか教えてください。
おかげでアーロンを、私は上記の質問を投稿する前にそのリンクを見てきました。あなたは論理的な鍵についてもっと私に明確にすることができますか? –