1

我有一个名为 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
4

3 回答 3

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)

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

于 2010-04-21T21:02:05.250 回答
1

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

于 2010-04-21T16:01:30.433 回答
0

添加一个强制执行的检查约束 (fromcity_id < tocity_id),你就准备好了

于 2010-04-21T21:37:22.910 回答