Обратное ограничение FK в Postgresql 9.0? - PullRequest
3 голосов
/ 16 июня 2011

Я знаю, что могу установить ограничение FK, чтобы убедиться, что Table1.ColA существует в Table2.Key, однако что, если я хочу сделать обратное?

Я хочу убедиться, что Table1.ColA НЕ существует вTable2.Key .. Могу ли я сделать это с помощью какого-либо ограничения CHECK, триггера, пользовательской функции и т. Д.?Спасибо!

РЕДАКТИРОВАТЬ:

Допустим, у меня есть таблица с именем "Имена":

1 Michael
2 David
3 William

Теперь у меня есть таблица с именем "Никаки":

Mike -> 1
Mikey -> 1
Dave -> 2
Bill -> 3
Will -> 3

Я хочу убедиться, что никто не добавляет строку «Майкл» в «Псевдонимы», поскольку она уже существует в «Имена».

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

В стандартном SQL вы можете использовать CREATE ASSERTION, но PostgreSQL его не поддерживает.Вы можете подделать его в триггерах обеих таблиц (например, UNION две таблицы, GROUP BY имена и проверка COUNT(*) > 1 или, возможно, просто проверить, что логические значения таблицы inserted не отображаются в другой таблице) или иным образом процедурноcode.

Вы можете «спроектировать» проблему, используя одну таблицу и явный подтип, и использовать обычное ограничение UNIQUE, как предлагает @ gbn.

1 голос
/ 16 июня 2011

Рассматривали ли вы использовать одну таблицу с

  • «тип имени» (primar, псевдоним)
  • "псевдоним", который является самостоятельным FK

Насколько я понимаю, у вас есть список имен, которые должны быть уникальными.

Это устранит необходимость в каком-либо коде для поддержания «не FK»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...