如何在sql server中强制执行此约束

时间:2010-04-21 15:58:41

标签: sql-server sql-server-2000 constraints unique-constraint

我有一个名为city的表,还有一个名为city_city的表。 city_city关联两个城市记录,因此它有一个fromcity_id和一个tocity_id。我可以通过唯一键强制执行fromcity_id和tocity_id的唯一性,但如何强制执行唯一性,以便在fromcity_id和tocity_id被反转时无法插入记录。

例如,以下记录在概念上是相同的:

id    fromcity_id  tocity_id
1     100          200
2     200          100

3 个答案:

答案 0 :(得分:1)

这将需要一个触发器,因为您需要检查其他行。另外,您可以在应用程序层执行此操作。

答案 1 :(得分:1)

另一种选择是创建一个在视图上具有唯一约束的索引视图(可怕,但也可以完成工作)。视图将类似于:

CREATE VIEW vwSomeView WITH SCHEMABINDING
AS
    SELECT fromcity_id AS 'C1', tocity_id AS 'C2' FROM city_city
    UNION ALL
    SELECT tocity_id AS 'C1', fromcity_id AS 'C2' FROM city_city

然后在视图上创建一个唯一索引:

CREATE UNIQUE INDEX UIX_vwSomeView ON vwSomeView (C1, C2)

问题是这是否比在每个插入上选择表的触发器具有更多,更少或大致相同的开销。答案是分析和测试您的工作负载,数据量和吞吐量。

答案 2 :(得分:0)

添加一个强制执行的检查约束(fromcity_id< tocity_id)并且你已全部设置