Другой вариант - создать индексированное представление с уникальным ограничением на представление (ужасно, но также сделало бы эту работу).Представление будет выглядеть примерно так:
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)
Вопрос в том, имеет ли он больше, меньше или примерно такие же издержкитриггер, который выбирает таблицу на каждой вставке.Ответ заключается в том, чтобы профилировать и тестировать свою рабочую нагрузку, объемы данных и пропускную способность.