Приложение, реализованное в рамках лекции можно скачать по ссылке. Для распаковки архива воспользуйтесь командой 7z x FILE.7z.

Предметная область

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

Произведение описывается следующим:

  • Название
  • Язык
  • Год написания
  • Список авторов
  • Количество символов (размер в страницах)

Автор произведения описывается следующим:

  • Фамилия
  • Имя
  • Отчество
  • Второе имя
  • Дата рождения

Книга описывается следующим:

  • Название
  • Список произведений
  • Дата издания
  • Тираж
  • ISBN, опциональное поле

Издательство описывается следующими полями:

  • Название
  • Дата основания
  • Список книг

Читатель описывается следующими полями:

  • Псевдоним
  • Электронная почта

Читатель может оставлять отзывы к книгам и произведениям.

Задача №1. Формирование модели данных

Используйте инструмент draw.io для формирования модели данных приложения.

При формировании модели точно указывайте типы данных и их размерность. Список поддерживаемых Sequel-типов можно узнать в документации http://sequel.jeremyevans.net/rdoc/files/doc/schema_modification_rdoc.html

Задача №2. Формирование миграций

Опишите схему приложения с помощью набора миграций. В каждой миграции должна создаваться одна только одна таблица. Миграции описаны в официальной документации. Проверьте работу каждой из миграций.

Задача №3. Формирование классов-моделей

Для каждой таблицы сформируйте классы-модели. В классах-моделях укажите связи с другими таблицами.

С использованием данных классов заполните базу данных. Для заполнения можете использовать информацию об Айзеке Азимове.

Задача №4. Работа на уровне моделей

Используя сформированные классы-модели решите следующие задачи:

  • Узнать список авторов конкретного издательства
  • Найти первое издание произведения
  • Отобразить список авторов, отсортировав по количеству изданных книг (тираж)
  • Найти самого “толстого” автора: у которого по произведениям суммарно больше всего страниц
  • Найти самого популярного у издательств автора: которого печатают больше всего разных издательств
  • Или найти автора-однолюба, который печатается исключительно в 1 издательстве
  • Найти авторов “пишу в стол”, у которых есть произведение с разницей в дате написания и дате первого издания этого произведения больше 15 лет
  • Добавить авторам дату смерти и найти список “непризнанных” писателей, которых впервые опубликовали после смерти
  • Проверить, могли ли два писателя творить в соавторстве: т.е. есть ли у них совместные книги или они жили (в творческом возрасте, т.е. от 20 и до смерти) в одно время и писали на одном языке
  • Найти автора-полиглота, который писал на 3 языках и более
  • Найти “вредные издательства”, у которых выше всего процент переименованных книг (книг с одним произведением, у которых название издания не совпадает с названием произведения)