Антипаттерн: булевы значения как строки

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
11,164
Реакции
1,653
Credits
43,381
Антипаттерн: булевы значения как строки
В таблице users встречал такое:
SQL:
is_active VARCHAR(5) -- значения 'true' или 'false'
На первый взгляд — ерунда. На практике: – нет валидации: можно вставить 'tru', 'yes', '0', – медленнее сравнение, чем у BOOLEAN, – больше места в хранилище, – сложно агрегировать и строить аналитику.

Как надо:
SQL:
is_active BOOLEAN DEFAULT true
– Экономия места (1 байт против 5 и больше) – Проверка через WHERE is_active – Простой COUNT(*) FILTER (WHERE is_active) для отчётов – Автоматическая поддержка в ORM и UI-форматах
Даже если тебе нужно больше состояний - используй ENUM, а не строку.
Чем проще тип, тем меньше шансов на баг.