@kirill-93

Зачем использовать NULL в базах данных?

При создании таблиц встает вопрос: ставить "not null" или нет.
Я не говорю о случаях, когда null необходим, например, если у вас установлен unique index или пустая строка - это тоже осмысленное значение и его надо отличать от null.
Неудобство, которое мы получаем, если поле nullable - это двойная проверка на отсутствие данных.
Простой пример: таблица пользователей и форма для их редактирования. Если мы не заполняем поле и отправляем форму, то на сервер приходит пустая строка, которая и сохраняется в БД.
Далее, если нам нужно, например, вытащить всех пользователей, у которых не указан номер телефона, нам нужно писать так:
where `phone` != '' and `phone` is not null
А если бы мы не использовали null, то хватило бы
where `phone` != ''
Тут можно на этапе записи в БД приводить все пустые поля в null (так по умолчанию ведет себя laravel).
Но зачем все усложнять? Почему бы просто не использовать пустую строку по умолчанию там, где null не нужен?
Кроме того, в каких-то советах по оптимизации я читал, что пустая строка - это быстрее.
Как вы создаете таблицы? Используете ли not null или нет?
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
@php666
Простой пример: таблица пользователей и форма для их редактирования. Если мы не заполняем поле и отправляем форму, то на сервер приходит пустая строка, которая и сохраняется в БД.
это у вас она сохраняется. Что мешает этого не делать? Достаточно после валидации бизнес-логики пройтись по массиву данных, перед вставкой в базу, и обNULLить все переменные с пустыми строками. Пустые строки в базе не нужны, никогда. Нет ни одной причины их там хранить.

пустая строка - это тоже осмысленное значение
теоретически - это "осмысленное значение", практически - это мусор, это результат развития языков высокого уровня, типа php, которые позволяют вам записывать в базу пустую строку (поощряют это делать в виду своих конструктивных особенностей).
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
OnYourLips
@OnYourLips
where phone is not null
Потому что это выборка записей, где нет телефона, а не где он состоит из 0 символов.

Значение с '' не должен пропускать валидатор.
Ответ написан
BojackHorseman
@BojackHorseman
...в творческом отпуске...
null значит что значение не определено. не значит что оно ноль или пустая строка или еще что то, а значит что не определенно.

двоичная логика: истина, ложь
троичная логика: "истина", "ложь", null
Ответ написан
@Vitsliputsli
Отсутствие значения (null) не будет использоваться при операциях со строками. К примеру, если вы будете считать среднее по столбцу, то такие строки будут отброшены, а если вместо null будет 0, то они будет учитываться и результат будет некорректен.
Поэтому выбирайте по-смыслу.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы