@romicohen
Системный Архитектор

В чем вообще соль задания nullable полей в БД, вместо пустых значений по умолчанию, есть ли в этом какой-то сакральный смысл?

Работаю с большим легаси - из-за значительного количества полей со значением NULL в моделях и попыток вывести это на фронт - постоянно приходится это фиксить тем или иным образом.

Но тут я подумал вот о чем:

- А может я чего-то не понимаю? Может NULL-поля имеют какое-то особенное преимущество перед просто пустыми значениями?

Смотрите:

- При проектировании БД мы можем поле сделать nullable, а можем просто назначить ему по умолчанию '', 0, '[]', и т.д., по контексту.

В каких ситуациях нужно выбрать первое, а в каких второе?

P.S. Не надо предлагать склейку с вопросом про INT и Null - там вопрос скорее про INT, а у меня вопрос про Null - ощутите разницу.

P.P.S. Если кому-то удобнее на примере: стандартная ситуация - профайл пользователя с кучей варчар полей, многие из которых могут быть пустыми (юзеру в лом заполнять) - что выбрать: Null или пустую строку в качестве значения поля в БД по умолчанию?
  • Вопрос задан
  • 542 просмотра
Решения вопроса 3
Adamos
@Adamos
NULL - это не пустое поле. Это "поле не заполнено".
Используется в тех случаях, когда разница между этими состояниями - есть.
Кроме того, у числовых полей или дат просто нет "пустого" варианта.
0 и '1970-01-01 0:00:00' - это значения, которые вполне могут иметь смысл.
Например, при подсчете средних значений или интервалов NULL позволяет исключить ненужные строки.

Если вам без разницы, заполнил юзер свои поля или нет - значение по умолчанию подходит, использовать NULL просто незачем.
Ответ написан
Комментировать
yarkov
@yarkov
Помог ответ? Отметь решением.
вместо пустых значений по умолчанию

Есть у вас поле id с типом int. Что должно быть в качестве пустого значения?
Есть у вас поле name с типом varchar. Что должно быть в качестве пустого значения?
NULL как универсальное значение, указывающее что в поле ничего не записано.
При проектировании БД мы можем поле сделать nullable, а можем просто назначить ему по умолчанию '', 0, '[]', и т.д., по контексту.

Представим ситуацию, что у нас есть в бд поле-флаг, который указывает что мы хотим получать рассылку новостей с сайта. Если по-умолчанию будет 0, то пользователь отказался. Если 1, то согласился.
А если NULL, то пользователь ещё не определился с выбором и мы при каждом посещении сайта будем его спрашивать не хочет ли он подписаться на рассылку, пока он не выберет 0 или 1.
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
есть

возможно, знаете, что в ЯП null нету, там есть инициализированные переменные без значений, но, внезапно - у них всегда есть значения ( те самые 0, пустая строка, False )

доходит до курьезов с тем же None в Питоне, когда как бы нет, а в то же время и есть (ну там через obj завернуто, как-то складывается)

Профессор филологии:
- Приведите пример вопроса, чтобы ответ звучал как отказ,
и одновременно - как согласие.
Студент:
- Это просто! "Водку пить будете?" - "Ах, оставьте!"


так для чего же Null базе данных? для экономии, во-первых, это сильно меньше места, а во-вторых (в общем, оно следует из во-первых)... дадим слово Анатолию Барбакару:

Одна из карт застревает в коробке. Якобы застревает. Играешь без нее. И, разумеется, знаешь, какая именно карта не участвует в игре. Информация очень существенная, особенно если «забытая» карта туз


когда база знает, что в таких-то записях-айтемах параметр null, она их отбрасывает, когда null не входит в условие фильтра/выборки, и наоборот

вот для этого и придумали, повторюсь что для ЯП такого не нужно, потому в них механизм другой
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
У тебя нет понимания что такое NULL. NULL - это нет конкретного значения
можем просто назначить ему по умолчанию '', 0, '[]', и т.д

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

Примерно как Кот Шрёдингера - у него состояние в суперпозиции NULL
Ответ написан
Комментировать
trijin
@trijin
PHP программист
Еще одно применение: Не обязательное поле, но с уникальным индексом.
Пустым оставить нельзя - т.к. пустой будет не уникальный, а NULL можно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы