Одно проверочное ограничение или несколько проверочных ограничений? - PullRequest
3 голосов
/ 16 марта 2010

Какие-либо предложения о том, лучше ли меньше проверочных ограничений или больше? Как они должны быть сгруппированы, если вообще?

Предположим, у меня есть 3 столбца VARCHAR2(1 BYTE), каждый из которых представляет собой флаг 'T' / 'F'. Я хочу добавить проверочное ограничение для каждого столбца, указав, что разрешены только символы IN ('T', 'F').

Если у меня будет 3 отдельных проверочных ограничения, по одному для каждого столбца:

COL_1 IN ('T', 'F')

COL_2 IN ('T', 'F') 

COL_3 IN ('T', 'F')

Или одно проверочное ограничение:

COL_1 IN ('T', 'F') AND COL_2 IN ('T', 'F') AND COL_3 IN ('T', 'F')

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

(PARENT_CNT > 0 AND PRIMARY_PARENT IS NOT NULL) OR (PARENT_CNT = 0 AND PRIMARY_PARENT IS NULL)

Ответы [ 3 ]

8 голосов
/ 16 марта 2010

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

0 голосов
/ 09 апреля 2016

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

Например, при наличии глобального идентификатора и локального идентификатора, если вы хотите, чтобы подобное условие не могло быть нулевым. И любой из них может иметь значение null или оба не null. Но вам нужно убедиться, что один из них не нулевой, или оба не нулевые.

Пример: У меня есть два столбца BatchId int NULL и SuperBatchId int NULL. Тогда мое проверочное ограничение равно

CHECK((BatchId  IS NOT NULL) OR (SuperBatchId  IS NOT NULL))

Это пример проверочного ограничения для двух столбцов.

0 голосов
/ 16 марта 2010

Я рекомендую вообще не использовать varchar.Это не стандартная практика для людей, которые хранят логические значения в базах данных без логического типа данных.Я рекомендую ваш наименьший целочисленный тип, где 0 = False и ненулевое значение = True.Ограничения становятся тривиальными для проверки на этом этапе (даже ненужными).

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

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