1

我有一张名为city的表格和一张名为city_city的表格。 city_city关联两个城市记录,所以它有一个fromcity_id和一个tocity_id。我可以通过一个唯一的关键字强制执行fromcity_id和tocity_id的唯一性,但是如何执行唯一性,以便在fromcity_id和tocity_id颠倒时不能插入记录。如何在sql server中执行此约束条件

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

id fromcity_id tocity_id 
1  100   200 
2  200   100 

回答

1

这将需要一个触发,因为你需要检查其他行。毫不夸张地说,你可以在应用层做到这一点。

1

另一个选择是创建一个索引视图,在视图上有一个唯一的约束(horrid,但也可以完成这项工作)。该视图会是这样的:

CREATE UNIQUE INDEX UIX_vwSomeView ON vwSomeView (C1, C2) 

的问题是,这是否有更多的,更少的,或大致相同的开销,作为一个触发器选择:

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 

在视图然后创建唯一索引每个插页上的表格。对此的回答是针对您的工作负载,数据量和吞吐量进行配置和测试。

0

添加强制检查约束(fromcity_id < tocity_id)并且您全部设置为