Как применить это ограничение на сервере SQL - PullRequest
1 голос
/ 21 апреля 2010

У меня есть стол с именем 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 ]

1 голос
/ 22 апреля 2010

Другой вариант - создать индексированное представление с уникальным ограничением на представление (ужасно, но также сделало бы эту работу).Представление будет выглядеть примерно так:

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)

Вопрос в том, имеет ли он больше, меньше или примерно такие же издержкитриггер, который выбирает таблицу на каждой вставке.Ответ заключается в том, чтобы профилировать и тестировать свою рабочую нагрузку, объемы данных и пропускную способность.

1 голос
/ 21 апреля 2010

Для этого потребуется триггер, потому что вам нужно изучить другие строки. К счастью, вы можете сделать это на уровне приложений.

0 голосов
/ 22 апреля 2010

Добавьте проверочное ограничение, которое применяет (fromcity_id

...