Полное руководство для начинающих по Realm DB на Android (CRUD с несколькими связями)

YOUTUBE · 23.11.2025 03:12

Ключевые темы и таймкоды

Введение в Realm

0:00
  • Realm - альтернатива базе данных Room для Android.
  • Рассматриваются преимущества и недостатки Realm.
  • Переход к практике через создание демонстрационного приложения.

Структура базы данных

0:58
  • База данных включает курсы программирования и их преподавателей.
  • Каждый курс может иметь несколько студентов.
  • Возможность удаления записей и сохранения изменений.

Что такое Realm

1:53
  • Realm оптимизирована для мобильных приложений.
  • Поддерживается компанией, известной по MongoDB.
  • Данные хранятся в объектном формате, что упрощает работу с Kotlin.

Преимущества Realm

2:41
  • Realm проще в реализации и интуитивно понятен.
  • Меньше подвержен ошибкам по сравнению с Room.
  • Использует механизм доступа с нулевым копированием для повышения эффективности.

Сравнение с Room

3:36
  • Realm взаимодействует с представлением данных напрямую.
  • Room использует промежуточный этап преобразования данных.
  • Realm работает на мультиплатформенной платформе Kotlin.

Заключение

4:33
  • Меньше шаблонного кода по сравнению с Room.
  • Realm всегда работает с транзакциями, что снижает вероятность ошибок.
  • Room также поддерживает транзакции, но требует дополнительных усилий для обеспечения согласованности данных.

Преимущества и недостатки Room и Realm

5:23
  • Room проверяет схему и запросы во время компиляции, что предотвращает ошибки.
  • Realm проверяет схему только во время выполнения, что может привести к сбоям.
  • Запросы в Realm ограничены и не могут быть такими сложными, как в Room.

Ограничения Realm и рекомендации

6:22
  • Realm позволяет объединять таблицы и использовать операторы, но может столкнуться с проблемами при сложных запросах.
  • Realm подходит для большинства проектов, но не для тех, которые сильно зависят от SQL-запросов.
  • Realm является явным победителем в большинстве случаев.

Реализация базы данных Realm

7:16
  • В Realm объекты представляют собой записи в таблице.
  • Для реализации базы данных Realm создается пакет models и определяется схема.
  • Объекты в Realm должны наследоваться от класса Realm.

Отношения между объектами в Realm

8:10
  • В Realm объекты связаны через коллекции или списки.
  • Отношения "один к одному" и "один ко многим" используются для определения связей между объектами.
  • Отношения "многие ко многим" применяются для студентов и курсов.

Пример реализации модели Address

9:47
  • Модель Address включает поля для полного имени, улицы, номера дома, почтового индекса и города.
  • В Realm поля инициализируются пустыми значениями.
  • Отношения в Realm позволяют указывать связанного учителя в объекте Address.

Первичный ключ и соглашения в Realm

11:57
  • Первичный ключ в Realm называется идентификатором подчеркивания.
  • Соглашения в Realm аналогичны соглашениям в MongoDB.

Идентификаторы объектов в Realm

12:18
  • Идентификаторы объектов в Realm не являются строками или целыми числами.
  • Они содержат информацию о временной метке создания объекта.
  • Это позволяет сортировать записи по времени создания без необходимости сохранять дополнительное поле.

Встроенный объект Address

13:07
  • Адрес всегда связан с учителем и не может существовать отдельно.
  • Учитель имеет уникальный идентификатор, который автоматически используется для адреса.
  • Адрес внедряется в объект учителя, что позволяет избежать дублирования данных.

Курсы и учителя

14:05
  • Учитель имеет один адрес и список курсов, которые он проводит.
  • Курсы хранятся в списке Realm, что позволяет Realm моделировать отношения между учителем и курсом.
  • Список Realm оптимизирован для уникальных записей, что предотвращает дублирование курсов.

Создание класса Course

15:37
  • Курс имеет уникальный идентификатор и название.
  • Курс связан с одним учителем, который может быть нулевым.
  • Курс также имеет список зачисленных студентов, который также хранится в списке Realm.

Создание класса Student

16:56
  • Студент имеет уникальный идентификатор и имя.
  • Студент может быть зачислен на несколько курсов, а курс может иметь несколько студентов.
  • Отношения "многие ко многим" реализуются через обратные ссылки.

Создание схемы в Realm

17:53
  • В схеме Realm есть адреса, учителя, курсы и студенты.
  • В отличие от Room, Realm упрощает создание и управление схемой.
  • Realm позволяет избежать необходимости в дополнительных таблицах и внешних ключах.

Создание ссылки на базу данных

18:51
  • В Realm ссылка на базу данных создается в классе приложения.
  • Инициализация базы данных Realm осуществляется в методе oncreate.
  • Конфигурация Realm указывает схему, используемую для базы данных.

Работа с базой данных в ViewModel

20:47
  • ViewModel ссылается на базу данных Realm.
  • Для ссылки на базу данных в манифесте регистрируется класс приложения.
  • Это позволяет использовать базу данных в различных частях приложения.

Введение в функционал базы данных

21:04
  • Возможность записи, чтения, обновления и удаления данных.
  • Использование сопрограмм и потоков под капотом.
  • Запись данных в базу данных Realm через лямбда-блок.

Создание и обновление адресов

22:02
  • Создание и заполнение адресов для преподавателей.
  • Использование изменяемых свойств для обновления данных.
  • Создание списка курсов и их связь с преподавателями.

Создание и обновление преподавателей

24:05
  • Создание преподавателей и их адресов.
  • Указание курсов, которые преподает каждый преподаватель.
  • Обновление ссылок на преподавателей в адресах и курсах.

Создание и обновление студентов

25:47
  • Создание и заполнение данных студентов.
  • Указание курсов, на которые зачислены студенты.
  • Использование обратных ссылок для управления отношениями "многие ко многим".

Перевод данных в управляемый формат

28:40
  • Перевод неуправляемых объектов в управляемый формат.
  • Использование функции копирования в оперативную память.
  • Введение политики обновления для уникальных ключей.

Считывание данных из базы данных

30:36
  • Определение запросов для чтения данных из базы данных.
  • Связь данных с курсами и преподавателями.
  • Проверка корректности данных и их отображения.

Запрос курсов в базе данных

31:19
  • Запрос всех курсов в базе данных с помощью Realm.
  • Использование перегрузки запроса для передачи общего типа элементов.
  • Преобразование результатов запроса в поток для реагирования на изменения.

Преобразование потока в список

32:17
  • Преобразование потока изменений результатов в список.
  • Кэширование списка курсов в области viewmodel.
  • Использование состояния для отслеживания изменений в списке курсов.

Отображение списка курсов в пользовательском интерфейсе

33:35
  • Создание ссылки на модель представления в Surface.
  • Обновление списка курсов в состоянии.
  • Отображение списка курсов с модификаторами и интервалами.

Отображение информации о курсе

34:25
  • Отображение названия курса, содержания, преподавателя и списка зачисленных студентов.
  • Использование Realm для работы с объектами как с обычными объектами Kotlin.
  • Настройка текста и модификаторов для отображения информации о курсе.

Добавление кнопки для изменения курса

37:15
  • Добавление кликабельной кнопки для изменения курса.
  • Проверка работы вставки данных в базу данных.
  • Кэширование результатов запроса в памяти для прослушивания в коде Compose.

Решение проблемы с Realm

38:35
  • Исправление ошибки, связанной с использованием встроенных объектов Realm.
  • Применение плагина Realm Gradle для корректной работы.
  • Проверка корректности данных и механизма работы базы данных.

Запросы к базе данных

40:29
  • Обсуждение базовых запросов к базе данных Realm.
  • Ссылка на документацию для языка запросов Realm.
  • Сравнение с SQL-запросами и запросами MongoDB.

Введение в запросы Realm

40:52
  • Обзор точечной записи, операторов сравнения и логических операторов.
  • Как работать со строками, словарями и списками.
  • Примеры простых запросов для работы с данными.

Пример запроса на основе полей

41:49
  • Запрос на основе полей "зачисленные студенты".
  • Использование параметров для предотвращения SQL-инъекций.
  • Пример запроса с именем Джона-младшего.

Запросы на агрегацию

42:37
  • Запрос на курсы с количеством зачисленных студентов больше или равно двум.
  • Запрос на курсы, где преподаватель имеет имя "Джон".
  • Примеры использования запросов для фильтрации данных.

Удаление курсов и отображение адресов преподавателей

43:46
  • Введение переменной для курса и создание функции для отображения сведений о курсе.
  • Создание диалога для отображения адреса преподавателя.
  • Настройка внешнего вида диалога и отображение адреса.

Удаление курса

46:53
  • Создание функции для удаления курса.
  • Использование метода findLatest для предотвращения удаления несуществующих данных.
  • Проверка и удаление курса из базы данных.

Заключение и дополнительные ресурсы

50:29
  • Демонстрация работы приложения после удаления курсов.
  • Призыв к подписке на премиум-курсы для углубленного изучения Realm.
  • Вопросы к зрителям о Realm и Room.