1

我的 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 尝试了一个复杂的约束,但我也无法正确地得到这个语法。

我怎样才能做到这一点?

4

2 回答 2

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)
于 2013-01-08T11:26:53.150 回答
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
)

编辑 - 经过进一步思考(和评论),我同意这不是最好的解决方案

于 2013-01-08T11:44:04.693 回答