Привет всем!
Допустим, у нас есть обычное 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?
Спасибо!