Базы данных

Базы данных #

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

SQL #

Что нужно знать:

  • SQL синтаксис - SELECT, INSERT, UPDATE/DELETE, GROUP BY, JOIN
  • Создание таблиц
  • Индексы и первичный ключ
  • Внешние ключи
  • RDBMS - MySQL, Postgres. Различные книги/курсы, как правило, учат SQL в контексте в одной из этих двух систем управления баз данных. Для джуниров разница между ними не принципиальна
  • Embedded SQL databases - SQLite, H2

Избранные курсы и учебные ресурсы #

JDBC #

Базовый инструмент для работы с SQL из Java.

Что нужно уметь:

  • Подключать библиотеки для работы JDBC через Maven/Gradle в проекты со Spring и без него
  • Создавать таблицы
  • Читать данные из таблиц в ассоциативные массивы или в экземпляры классов-моделей

Избранные курсы и учебные ресурсы #

ORM #

ORM - инструмент для стирания границ между записями в базе и Java объектами. Таблицы в базе данных, как правило, описывают некоторые сущности - пользователей, заказы, товары. ORM позволяют описать эти сущности с помощью Java классов и совершать действия над таблицами (чтение, вставку, и прочие) без написания SQL синтаксиса - ORM это берёт на себя.

Сфокусируемся на ORM Hibernate и Spring Data JPA.

Что нужно уметь:

  • Подключать библиотеки для работы Hibernate через Maven/Gradle в проекты со Spring и без него
  • Писать классы, описывающие хранящиеся в таблицах сущности
  • Hibernate - CRUD операции (create, read, update, delete)
  • Spring Data JPA - CRUD операции с помощью интерфейсов-репозиториев Spring Data

Избранные курсы и учебные ресурсы #

Инструменты миграций #

Миграции SQL баз данных - инструмент версионирования структуры таблиц и данных, который позволяет бесшовно менять и дополнять состояние таблиц в проектах. Проводя аналогию с git, одна миграция эквивалента одному коммиту, только субъектом изменения является база данных, а не репозиторий с кодом. Широко используется в коммерческих проектах.

2 самых популярных инструмента для Java Backend приложений - FlyWay, Liquibase. Советую попробовать оба.

Что нужно уметь:

  • Интегрировать инструмент миграций в приложение на Spring MVC / Spring Boot
  • Понимать взаимодействия миграций и автоматического создания таблиц через ORM Hibernate
  • Писать миграции, меняющие схему БД и данные внутри таблиц
  • Применять новые миграции к уже задеплоенному проекту

Избранные курсы и учебные ресурсы #

NoSQL базы данных #

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

В рамках проектов, на практике поработаем с S3/Minio - хранилищем файлов, и Redis - хранилищем кэша/сессий.

Избранные курсы и учебные ресурсы #

  • Практика - проекты 6 и 7

Что дальше #

Перечисленные выше знания и инструменты - база для Java Junior (кроме NoSQL). Если есть желание и необходимость углубиться в Backend технологии, советую обратить внимание на:

  • Document-oriented DB - MongoDB
  • Key-value storage - Redis
  • Интеграции хранилищ кэша со Spring Boot - Hazelcast, Ehcache