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