我需要在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
中的主键,但仅提及ReportID
中的Tabletwo
。
感谢您的时间。
答案 0 :(得分:4)
如果您有复合主键,则引用它的所有外键约束必须使用复合主键的所有列。
因此,在您的情况下,TableTwo
必须引用TableOne(ReportID, Date)
解决这个问题的唯一方法是在UNIQUE INDEX
上创建TableOne (ReportID)
- 然后您可以单独创建对该唯一约束的外键引用。
但那引出了一个问题:为什么ReportID
不是唯一的主键,如果它已经是唯一的(因为你可以在它上放UNIQUE INDEX
)和NOT 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)