Работа с БД
База данных
Виды БД
Транзакции
ACID
Проектирование БД
Основные задачи и этапы проектирования БД
JDBC
Пара примеров
ORM
Плюсы ORM
Минусы ORM
Hibernate
@Entity
@Table
@Column
@OneToMany
@ManyToOne
Repository
@Query и JPQL(HQL)
@Transactional
Миграции
Миграция
2.97M
Категория: ПрограммированиеПрограммирование

Работа с БД

1. Работа с БД

Что вы будете делать, когда последние
DBA отправятся в Вальхаллу?

2. База данных

База данных — это упорядоченный набор
структурированной информации или данных,
которые обычно хранятся в электронном
виде в компьютерной системе
База данных обычно управляется системой
управления базами данных (СУБД). Данные
вместе с СУБД, а также приложения, которые
с ними связаны, называются системой баз
данных, или, для краткости, просто базой
данных

3. Виды БД


Иерархические (LDAP, файловые системы)
Сетевые (IDMS)
Реляционные (MySQL, PostgreSQL, SQLite)
NoSQL
Ключ-значение (Redis)
Документоориентированные (MongoDB)
Графовые (Neo4j)
Колоночные (Vertica)
Базы данных временных рядов (Prometheus)
Комбинированные (CockroachDB, Couchbase)

4. Транзакции

Транза́кция — группа последовательных операций с базой данных, которая
представляет собой логическую единицу работы с данными.
Транзакция может быть выполнена либо целиком и успешно, соблюдая
целостность данных и независимо от параллельно идущих других транзакций,
либо не выполнена вообще, и тогда она не должна произвести никакого эффекта

5. ACID

Atomicity (атомарность) – гарантирует, что любая транзакция будет зафиксирована только
целиком
Consistency (согласованность) – любая завершенная транзакция фиксирует только
допустимые результаты
Isolation (изолированность) – результат выполнения транзакции не должен зависеть от
выполнения других параллельных транзакций. На практике труднодостижима, поэтому здесь
вводится понятие “уровни изолированности”
Durability (долговечность) – гарантирует, что если мы получили подтверждение о
выполнении транзакции, то изменения, вызванные этой транзакцией, не будут отменены (в
результате, например, сбоя системы)

6. Проектирование БД

Проектирование БД — процесс создания
схемы БД и определения необходимых
ограничений целостности
Целостность БД — соответствие
имеющейся в БД информации её внутренней
логике, структуре и всем явно заданным
правилам
Ограничение целостности — правило,
налагающее некоторое ограничение на
возможное состояние базы данных

7. Основные задачи и этапы проектирования БД

Задачи:
обеспечение хранения в БД всей необходимой информации
обеспечение возможности получения данных по всем необходимым
запросам
сокращение избыточности и дублирования данных
обеспечение целостности базы данных
Этапы:
концептуальное (инфологическое) проектирование
логическое (даталогическое) проектирование
физическое проектирование

8.

Ближе к делу (Java)

9. JDBC

JDBC (Java DataBase Connectivity) — платформенно независимый промышленный
стандарт взаимодействия Java-приложений с различными СУБД, основанный на
концепции так называемых драйверов, позволяющих получать соединение с
базой данных по специально описанному URL

10. Пара примеров

11.

А можно как-то попроще?!
ORM

12. ORM

ORM или Object-relational mapping (рус. Объектно-реляционное
отображение) — это технология программирования, которая позволяет
преобразовывать несовместимые типы моделей в ООП, в частности, между
хранилищем данных и объектами программирования
ORM используется для упрощения процесса сохранения объектов в реляционную
базу данных и их извлечения, при этом ORM сама заботится о преобразовании
данных между двумя несовместимыми состояниями
Большинство ORM-инструментов в значительной мере полагаются на
метаданные базы данных и объектов, так что объектам ничего не нужно знать о
структуре базы данных, а базе данных — ничего о том, как данные организованы
в приложении

13. Плюсы ORM


наличие явного описания схемы БД, представленное в терминах какого-либо
языка программирования, которое находится и редактируется в одном месте;
возможность оперировать элементами языка программирования, т.е. классами,
объектами, атрибутами, методами, а не элементами реляционной модели данных;
возможность автоматического создания SQL-запросов, которая избавляет от
необходимости использования языка для описания структуры БД (Data Definition
Language) и языка манипулирования данными (Data Manipulation Language) при
проектировании БД и изменении её схемы соответственно;
не нужно создавать новые SQL-запросы при переносе на другую систему
управления базами данных, поскольку за это отвечает низкоуровневый драйвер
ORM

14. Минусы ORM


дополнительная нагрузка на программиста, которому, в случае
использования ORM необходимо изучать этот некий «дополнительный слой»
между программой и базой данных, который к тому же создает
дополнительный уровень абстракции — объекты ORM. В связи с этим могут
возникнуть вопросы соответствия особенностям ООП и соответствующим
реляционным операциям;
появление трудно поддающихся отладке ошибок в программе, если
присутствуют ошибки в реализации ORM, например, ошибки в реализации
кэширования ORM, такие как согласование изменений в разных сессиях;

15.

16. Hibernate

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

17.

18. @Entity

Entity – POJO-класс, связанный с БД с помощью
аннотации (@Entity)
К такому классу предъявляются следующие
требования:
должен иметь пустой конструктор (public или
protected)
не может быть вложенным, интерфейсом или
enum
не может быть final и не может содержать finalполей/свойств
должен содержать хотя бы одно @Id-поле

19. @Table

@Table – аннотация, которая указывает, с какой
таблицей будет связан Entity-класс
Если данная аннотация отсутствует, то связь будет
установлена с таблицей, название которой
совпадает с именем класса

20. @Column

@Column – аннотация, которая указывает, с какой
колонкой будет связано поле Entity-класса
Если данная аннотация отсутствует, то связь будет
установлена с колонкой, название которой
совпадает с именем поля

21.

One to many
Many to many
Phone
Client
Phone
1
Client
Family
3
2
Client
Family
4
many to one
one to one
Phone
Client
Client
phones
Phone
Family

22. @OneToMany

@OneToMany – аннотация, которая позволяет
задать отношение один ко многим
Используется вместе с аннотацией @ManyToOne
для задания двунаправленного отношения

23. @ManyToOne

@ManyToOne – аннотация, которая позволяет
задать отношение многие к одному
Используется вместе с аннотацией @OneToMany
для задания двунаправленного отношения

24. Repository

Несколько правил оформления:
Repository – абстракция для
взаимодействия с сущностью; через
репозиторий осуществляется
сохранение, обновление, удаление,
поиск сущностей.
1.
2.
3.
4.
имя репозитория – ИмяСущностиRepository
(необязательно).
первый Generic должен быть типом сущности, для которой
мы создали Repository (обязательно)
второй Generic должен быть оберточным типом типа ID
нашей сущности (обязательно)
мы должны унаследовать свой Repository от JpaRepository,
иначе Spring Data не предоставит реализацию для нашего
репозитория

25.

26. @Query и JPQL(HQL)

@Query – аннотация, позволяющая выполнять
произвольные запросы, используя JPQL(HQL) или нативный
SQL
JPQL – язык запросов, определенный JPA. JPQL подобен
SQL, но воздействует на объекты, атрибуты и отношения
вместо таблиц и столбцов.

27. @Transactional

@Transactional – аннотация, позволяющая сделать метод
транзакционным, т.е. создает для него соответствующую
транзакцию.
Также берет на себя ответственность за распространение
транзакции, т.е. присоединение других транзакционных
методов к текущей транзакции (если внутри businessLogic()
будет вызван другой транзакционный метод, он будет
использовать ту же транзакцию, которую использует
businessLogic())

28. Миграции

29. Миграция

Миграция — это изменение структуры базы данных, обновление её от одной версии до
другой
Миграции необходимы, чтобы поддерживать соответствие между версиями приложения
и базы данных
Миграции бывают версионными (выполняются один раз), и повторяющимися
(выполняются при каждом запуске)
В Spring Boot для управления миграциями используются инструменты для контроля
версии базы данных – Liquibase или Flyway

30.

31.

Спасибо
за внимание!
English     Русский Правила