Ограничение Postgres на основе нескольких столбцов? - PullRequest
0 голосов
/ 06 сентября 2018
key            | value   |  other         
----------------------------------- 
key1           | red     |  r1          
key1           | blue    |  b1  
key1           | blue    |  b2         
key2           | green   |  g
key2           | yellow  |  y

В postgres, как определить ограничение так, чтобы значение связывалось только с одним из ключей. Пример: red может иметь только key1, green может иметь только key2?

key            | value   |  other         
----------------------------------- 
key1           | red     |  r1          
key1           | blue    |  b1  
key1           | blue    |  b2         
key2           | blue    |  r4
key2           | yellow  |  y  

Это недопустимо, поскольку значение blue связано с key1 & key2.

1 Ответ

0 голосов
/ 06 сентября 2018

Правильное решение - это редизайн, чтобы вы нормализовали таблицы:

CREATE TABLE part1 (
   value text PRIMARY KEY,
   key text NOT NULL
);

CREATE TABLE part2 (
   value REFERENCES part1(value) NOT NULL,
   other text NOT NULL
);

Тогда ограничение гарантируется структурой таблицы, и вам не нужно хранить избыточные данные несколько раз.

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