Аладдин Биябангерд
ТекстыБазы данных

Некоторые backend-решения принимает база данных, а не Java

Автор:Аладдин БиябангердОпубликовано:4 мин чтения

Когда начинаешь писать backend, сущности обычно кажутся самой простой частью. Создаёшь несколько классов, добавляешь связи и переходишь к сервисам. Но с ростом системы понимаешь, что принятые решения по базе живут дольше, чем Java-код.

Должно ли значение быть уникальным, какие колонки вместе образуют ключ, хранится ли история или только последнее состояние — всё это позже превращается в бизнес-логику.

Сущности решают не всё

Работать с JPA удобно. Пишешь связи, создаёшь репозиторий и обращаешься с данными как с объектами. Из-за этого удобства легко забыть, что у базы есть собственные правила.

Глядя на модель данных, я стараюсь не останавливаться на вопросе «какая сущность с какой связана». Важнее оказываются другие: «допустима ли вторая копия этой записи?», «нужно ли знать прошлое состояние?», «может ли эта операция повториться?».

Потому что когда правило, которое вы держали в коде приложения, держит база, другая часть системы уже не нарушит его случайно.

Простая схема потом меняет многое

В первой версии всё выглядит просто. Потом приходят аудит, отчётность, конкурентный доступ и реальная нагрузка. Именно тогда становится видна цена ранних решений по базе.

Поэтому теперь, собирая новую систему, я не считаю базу просто местом, где лежат Java-сущности. Она часть правил системы.