@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 или нет?
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
@php666
Простой пример: таблица пользователей и форма для их редактирования. Если мы не заполняем поле и отправляем форму, то на сервер приходит пустая строка, которая и сохраняется в БД.
это у вас она сохраняется. Что мешает этого не делать? Достаточно после валидации бизнес-логики пройтись по массиву данных, перед вставкой в базу, и обNULLить все переменные с пустыми строками. Пустые строки в базе не нужны, никогда. Нет ни одной причины их там хранить.

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

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

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

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

Войти через центр авторизации
Похожие вопросы
от 75 000 руб.
8BIT GROUP Москва
от 200 000 до 240 000 руб.
SK Digital Екатеринбург
от 60 000 до 90 000 руб.
24 мая 2019, в 23:37
100000 руб./за проект
24 мая 2019, в 21:53
500 руб./в час
24 мая 2019, в 21:36
500 руб./за проект