Введение в 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.