j-snow
@j-snow
Java junior developer

Какое значение хранить в базе для незаполненных текстовых полей – NULL или пустую строку?

Привет всем!

Допустим, у нас есть обычное TODO-приложение.
Каждая тудушка имеет название (title VARCHAR) и описание (description TEXT).
Описание - необязательное поле, и чаще всего оно будет незаполнено.
Всё хранится в MySQL-подобной базе.

Вопрос:
Что хранить в поле description, если оно не заполнено?
NULL или пустую строку?

Соответственно, нужно решить делать ли его nullable, или нет.

Вот какие плюсы я вижу, если НЕ делать поле nullabe, и просто хранить пустую строку:
+ На 1 бит меньше дискового пространства занимает каждая запись.
(по крайней мере, в MySQL+InnoDB; интересно, а что в других базах?)

+ Меньше проблем в коде. Не нужны проверки на null.
(хотя в современных языках - это уже почти не проблема)


Минусы:
– При передаче данных на клиент в формате JSON, будет больше трафика, так как придётся также передавать:
{..., description: ""}
(можно, конечно, не передавать пустые поля, но это лишние телодвижения в коде, как на сервере, так и на клиенте.)

– MySQL хранит BLOB и TEXT в отдельном объекте в своём хранилище. Это не обязательно отдельный файл, но это кажется некое отдельное пространство в файле таблицы. Не уверен точно. Поправьте меня. Но если это действительно так, то выборки вероятно будут медленнее.
(также интересно как хранят TEXT другие базы – PostgreSQL и AWS Aurora.)

– Возможно, будут более медленные выборки, если понадобится найти все незаполненные тудушки:
(WHERE description = '') vs (WHERE description IS NULL)


Вопрос 2:
Будет ли разница в плане организации полнотекстового поиска по полю description?

Спасибо!
  • Вопрос задан
  • 2021 просмотр
Пригласить эксперта
Ответы на вопрос 2
samodum
@samodum
Какой вопрос - такой и ответ
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Испортить успеете всегда. Поступайте логично. Если у поля нет значения то его значение null. То есть в любой момент вы сможете проверить на нуль и вывести сообщение.
Ответ написан
Ваш ответ на вопрос

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

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