Есть ли какая-либо разница между встроенными и внешними ограничениями в SQL? - PullRequest
0 голосов
/ 14 февраля 2019

Какой использовать или какой лучше?Есть ли разница?

searchtype_id bigint NOT NULL
или
CONSTRAINT searchtype_id_nn CHECK ((searchtype_id IS NOT NULL))

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Есть ли разница?Да.NOT NULL является частью определения хранилища типа столбца.Таким образом, NOT NULL может повлиять на то, как хранится значение (требуется ли флаг NULL?).Определение NOT NULL также можно использовать для оптимизации во время фазы компиляции запроса.

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

Определение NOT NULL предшествует ограничению CHECK и является стандартным для всех баз данных.

NULL-способность - это то, чтоЯ думаю как часть типа - потому что это объявление, встроенное в язык, которое говорит, что «этот столбец должен иметь значение».Целочисленный столбец, который может принимать значения NULL, несколько отличается от целого числа, которое не может.

Я бы рекомендовал использовать синтаксис NOT NULL вместо ограничения CHECK.Это дает базе данных больше информации о столбце.

0 голосов
/ 14 февраля 2019

Оба варианта различны, и между ними трудно выбирать, так как некоторые вещи применимы к одному, а некоторые нет к другим, например, ограничение NOT NULL может быть объявлено только встроенным, в то время как ограничения CHECK могут применяться к внешнему ограничению.Если бы мне пришлось выбирать между одним из них, я бы выбрал вне строки:

  • Я смогу назвать свои ограничения по отдельности, что поможет в отладке, как только вы получите ошибку или что-то в этом роде..
  • Также ограничение CHECK позволит мне ссылаться как на один, так и на несколько столбцов, которые можно использовать только как внешнее ограничение.
...