2009-03-05 3 views
4

Какие общие рекомендации следует учитывать при рассмотрении вопроса о том, следует ли отмечать поле «не null», а не просто объявлять все, кроме первичного ключа null?TSQL - Когда использовать «не null»

В случае, если поля «не нулевые» имеют значения DEFAULT?

ответ

7

Зависит от того, как вы хотите, чтобы ваше приложение действовало.

  • Во-первых, никогда не будет какой-либо возможной строки, где это значение НЕ содержит значимых данных, затем используйте NOT NULL. То есть, это значение всегда будет иметь смысл и что-то представлять.
  • Вы хотите, чтобы значение всегда заполнялось пользователем или программистом в той или иной форме или моде? Используйте NOT NULL без DEFAULT
  • Вы хотите, чтобы это было необязательно для пользователей и программистов? Используйте NOT NULL с ПО УМОЛЧАНИЕМ
1

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

0

Выполняйте то, что семантически правильно.

  • NULL - не всегда существует
  • NOT NULL - всегда существует

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

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

+1

«Использовать значения по умолчанию зависит от того, как данные вставляются. Если есть интерфейс с проверкой, вам не нужны значения по умолчанию, IMHO». Плохой выбор дизайна, базы данных вставляются из многих источников differnt, отличных от пользовательского интерфейса, по умолчанию, если необходимо, необходимо указать в базе данных, а не в пользовательском интерфейсе. – HLGEM

+0

В основном хорошо, но я думаю, что иногда вам нужно различать NULL, который является «неизвестным» и «не имеет менеджера». Ничто не отличается от NULL. –

+0

Когда использовать значения по умолчанию гораздо более спорными, тогда вопрос NULL, который, как мне кажется (знаю, действительно), может стать трудно справиться по мере роста системы. Если менеджер неизвестен, но мы знаем, что есть менеджер, который не должен обрабатываться при создании «Неизвестного» менеджера, это все, что я говорю. – cdonner

3

Я думаю, что у вас есть 2 вопроса здесь:

Если пометить поля, как не пустой?

Да, предполагая, что вы никогда не намереваетесь провести строку, чтобы иметь нулевое значение в этом поле. Подумайте о том, что «не null» является самым простым типом ограничений, которые вы можете поместить в поле. Ограничения в базе данных помогают обеспечить постоянство данных, оправдывая ожидания.

Нельзя заполнить поля по умолчанию?

Только при наличии очевидного значения по умолчанию. Например, в поле «Платные» таблицы счетов-фактур может быть значение по умолчанию 0 (false). В общем случае это работает наоборот: если поле имеет значение по умолчанию, то оно должно также быть не равным нулю.

Не создавайте значения по умолчанию только для значений по умолчанию - если поле не должно быть нулевым, но универсального значения по умолчанию нет, а затем оставьте его. Это гарантирует, что любые инструкции INSERT должны предоставить значение для этого поля.

0

Незначительные поля должны иметь значения по умолчанию, если они уместны, особенно если вы добавляете новое поле в таблицу (или изменяете поле, позволяя нулям не допускать нули), и вам нужно дать значение всем существующим записям , Однако значение по умолчанию не подходит или доступно для всех возможных полей. Например, у нас есть таблица person, lastname не может иметь значение null.Не существует последнего имени по умолчанию, которое мы могли бы назначить, если человек не имеет имени, запись не создается. С другой стороны, у вас может быть поле DateCreated со значением по умолчанию текущей даты. Это также поле, которое вы хотели бы иметь как не равное нулю, и вы бы хотели убедиться, что текущая дата была помещена в том, была ли запись вставлена ​​из пользовательского интерфейса или из импорта или из окна запроса.

Смежные вопросы