0

ReportID複合主キーの一部である関係を作成する必要があります。これは、MicrosoftSQLServer用に記述された私のコードです。

CREATE TABLE Tableone
(
    ReportID varchar UNIQUE,
    Date date,
    Line ommited

PRIMARY KEY (ReportNumber, Date)
)

CREATE TABLE Tabletwo
(
    Line omitted
    Line ommited
    ReportID varchar UNIQUE FOREIGN KEY REFERENCES Tableone(ReportID),
    Line ommited

    PRIMARY KEY (XX, XXX, ReportID)
)

更新:特に、ReportIDDateを主キーとして設定するように求められましたが、で参照するTableoneだけです。ReportIDTabletwo

御時間ありがとうございます。

4

1 に答える 1

4

複合主キーがある場合、それを参照するすべての外部キー制約は、複合主キーのすべての列を使用する必要があります。

だからあなたの場合-参照するTableTwo 必要がありますTableOne(ReportID, Date)

これを回避する唯一の方法は、UNIQUE INDEXonを作成TableOne (ReportID)することです。次に、その一意の制約のみへの外部キー参照を作成できます。

しかし、それは疑問を投げかけます:ReportIDそれがすでに一意であり(あなたがそれに置くことができるUNIQUE INDEXので)そしてNULLではない(それが複合PKの一部であるため)のに、なぜ主キーだけではないのですか?

ステップ1::を作成しUNIQUE INDEXます

CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);

ステップ2:から外部キーを作成しますTableTwo

ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)
于 2012-11-21T17:52:21.300 に答える