0

我需要创建一个关系,ReportID它是复合主键的一部分。这是我为 Microsoft SQL Server 编写的代码:

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)
)

更新:我们特别被要求将ReportID和设置Date为主键,Tableone但仅ReportIDTabletwo.

谢谢你的时间。

4

1 回答 1

4

如果您有复合主键,则引用它的所有外键约束必须使用复合主键的所有列

所以在你的情况下 -TableTwo 必须参考TableOne(ReportID, Date)

解决此问题的唯一方法是创建一个UNIQUE INDEXon TableOne (ReportID)- 然后您可以单独创建对该唯一约束的外键引用。

但这又引出了一个问题:如果它已经是唯一的(因为你可以在上面放一个)并且不是 NULL(因为它是复合 PK 的一部分),为什么不是ReportID唯一的主键?UNIQUE INDEX

第 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 回答