разрешить только определенные значения в столбце postgresql - PullRequest
0 голосов
/ 21 марта 2019

Как правильно разрешить только определенные значения в столбце postgresql?

Допустим, у меня есть столбец с именем colors , тип данных varchar с ограничением NOT NULL.Я ТОЛЬКО хочу, чтобы значение для новой строки было белым, синим или черным.Возможно, они являются продуктами, и мы делаем только эти определенные цвета.

Является ли подходящим способом добиться этого с помощью CHECK (color in("White", "Blue", "Black"))

Есть ли способ заставить столбец всегда быть все верхнимили в нижнем регистре, чтобы я не беспокоился о синем против голубого?Это лучший способ справиться с этим с помощью

ALTER TABLE test_table ADD CONSTRAINT CHECK (color = lower(color));

Это правильный способ обеспечить, чтобы все новые строки для ввода цвета были строчными?Очевидно, мне нужно обновить мой чек, чтобы приведенные выше цвета были «синими» и т. Д.

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

В случае, если у вас есть известный набор значений (aka. Enum), вы должны вместо этого использовать тип enum , который не только принудительно применяет значения, но и его регистр и имеет преимущество в том, что он потребляет меньше памятина диске и внутри индексов, например:

CREATE TYPE my_color AS ENUM ('White', 'Blue', 'Black');

CREATE TABLE my_table (
    ...
    color my_color,
    ...
);

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

0 голосов
/ 22 марта 2019
ALTER TABLE tbl ADD CONSTRAINT chk_only_white_blue_black
CHECK (color IN ('white', 'blue', 'black'));

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

Вы могли бы рассмотреть столбец enum или внешний ключ , указывающий на таблицу поиска.

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