Database First! О распространённых ошибках использования РСУБД
Николай Самохвалов (Postila) сделал доклад на HighLoad Junior о распространенных ошибках при использовании РСУБД.
В докладе в основном идет речь о PostgreSQL. MySQL и MariaDB удостоились лишь пары критических слов.
Тезисы:
Неиспользование базовых возможностей SQL - большая глупость, которая приводит к неэффективным системам, плохим данным, ошибкам и т.д.
Часто не используется контроль данных (ограничение целостности типа данных) и манипуляция ими.
За редким исключением обязательное наличие primary key. Его отсутствие - это нарушение реляционной модели, что приводит к аномалиям данных.
Суррогатные ключи - это иллюзия правильного проектирования, легко забыть о потенциальных ключах.
Не используются foreign keys. Как следствие: осиротевшие записи, ошибки 404, 500. Вычищать долго и дорого.
Не используется NOT NULL. Неполные данные, бессмысленные записи, аномалии.
Не используется встроенная проверка данных (например, что значение больше ноля). Мусор, некорректные данные.
Недостаточно продуманные типы данных и их размер. Например: слишком большой varchar. Дешевле увеличить, чем уменьшить. Для email указание varchar вместо citext и отсутствие lower()
Не нужно делать проверку данных только в приложении. С его ростом начнутся проблемы. Другие клиенты обращающиеся к базе смогут писать туда некорректные данные. Проверки должны быть как можно ближе к данным.
В PostgreSQL так же можно делать проверки и для неструктурированных данных JSON(b)
В MySQL с валидацией данных все плохо (даже в 8 версии) “The CHECK clause is parsed but ignored by all storage engines.”
В MariaDB с этим получше, но не на много. Проверки нельзя добавить или изменить (на момент написания поста, выделенная на слайде строка, с информацией об этом, отсутствует в официальной документации), только удалить.
Манипулировать данными можно средствами БД, а не перекладывать это на приложение.
В докладе приводятся примеры кода, ссылки на интересные материалы и небольшой чек-лист для проверки вашей базы.
Продукты
Наши разработки упрощают и ускоряют запуск проектов при сохранении качества