我认为大多数人不会使用图形设计器来执行此操作,因为阻止它的是图形设计器,而不是 SQL Server。尝试在查询窗口中运行 DDL:
ALTER TABLE dbo.YourTable ADD ID INT IDENTITY(1,1);
GO
CREATE UNIQUE INDEX yt_id ON dbo.YourTable(ID);
GO
现在您可以在其他表中引用此列没有问题:
CREATE TABLE dbo.SomeOtherTable
(
MatchID INT FOREIGN KEY REFERENCES dbo.YourTable(ID)
);
也就是说,我发现列名ID
完全没用。如果它是 a MatchID
,为什么不在MatchID
模式中出现的任何地方调用它呢?是的,它在 PK 表中是多余的,但恕我直言,整个模型的一致性更为重要。
就此而言,为什么你的桌子被称为SoccerMatch
?你有其他类型的比赛吗?我认为它将Matches
具有唯一的 ID = MatchID
。这样,如果您以后有不同类型的比赛,您不必为每项运动创建一个新表 - 只需添加type
某种类型的列。如果你只踢过足球,那SoccerMatch
有点多余,不是吗?
另外我建议键和唯一索引是相反的。如果您不打算将多列键用于外部引用,那么至少对我而言,让 PK 成为您在其他表中引用的内容更为直观。所以我想说:
CREATE TABLE dbo.Matches
(
MatchID INT IDENTITY(1,1),
EventDate DATE, -- Date is also a terrible name and it's reserved
Opponent <? data type ?> / FK reference?
);
ALTER TABLE dbo.Matches ADD CONSTRAINT PK_Matches
PRIMARY KEY (MatchID);
ALTER TABLE dbo.Matches ADD CONSTRAINT UQ_Date_Opponent
UNIQUE (EventDate, Opponent);