我的SQL Server(2008)数据库中有一个非有向图表,我想要一个约束来防止重复。 我的链接表有2列,(City1,City2),都是Cities表中的整数引用。我可以使用以下内容:
ALTER TABLE dbo.CityConnections
ADD CONSTRAINT CK_CityConnections_OneWayOnly UNIQUE (City1, City2)
这是我想要的一半,但这并不妨碍添加“反向”连接。
谷歌向我展示了... UNIQUE (MIN(City1,City2), MAX(City1,City2))
看起来它会完全符合我的要求,但语法无效。
我也尝试过使用CASE的复杂约束,但我也无法正确使用这种语法。
我怎样才能做到这一点?
答案 0 :(得分:4)
假设您可以控制您对表格的输入,以下内容应该有效;
ALTER TABLE dbo.CityConnections
ADD CONSTRAINT CK_CityConnections_Unq UNIQUE (City1, City2)
ALTER TABLE dbo.CityConnections
ADD CONSTRAINT CK_CityConnections_OneWayOnly CHECK (City1 < City2)
答案 1 :(得分:0)
太好了,一旦我问了一个让我困惑多年的问题,我就会得到灵感并自己弄清楚。 我的解决方案是添加计算列并将其用作唯一约束(索引)
我现在有:
CREATE TABLE [CityConnections]
(
[City1] [int] NOT NULL,
[City2] [int] NOT NULL,
[minCity] AS (case when [City1]<[City2] then [City1] else [City2] end),
[maxCity] AS (case when [City1]>[City2] then [City1] else [City2] end),
CONSTRAINT [CK_CityConnections_OneWayOnly] UNIQUE NONCLUSTERED
(
[minCity] ASC,
[maxCity] ASC
)
编辑 - 经过进一步思考(和评论)后,我同意这不是最好的解决方案