Skip to content

Latest commit

 

History

History
237 lines (169 loc) · 18.1 KB

README.md

File metadata and controls

237 lines (169 loc) · 18.1 KB

Курс "Базы данных"

Сервисы для проектирования

Многофункциональные сервисы

Программы для проектирования

Задание 1

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

  • Предложите список функциональных требований для проекта.
  • Определите роли пользователей и действия для каждой роли.
  • Определите объекты, о которых будут храниться данные.
  • Определите связи между объектами для хранения данных.
  • Нарисуйте схему объектной модели (используя любые обозначения, которые вам удобны).

 > Прием работ до до 18:00 12.09.2021.

Задание 2

Задача 1. Нарисуйте E/R диаграмму для библиотечной системы на основе следующих требований:

  • В библиотеки храняться экземпляры книг. Каждая копия (экземпляр) имеет свой уникальный номер копии, положение на полке и может быть однозначно идентифицирована с помощью номера копии вместе с ISBN.
  • Каждая книга имеет уникальный номер ISBN, год, название, автора и количество страниц.
  • Книги издаются издательствами. У издателя есть имя и адрес.
  • В библиотечной системе книгам присвоена одна категория или несколько. Категории образуют иерархию, поэтому категория может быть просто другой подчиненой категорией (подкатегория). Категория имеет только имя и никаких других свойств.
  • Каждому читателю присвается уникальный номер. У читателя есть Фамилия, Имя, адрес и день рождения. Читатель может взять один или несколько экземпляров книг. При взятии книги записывается запланированая дата возврата.

Задача 2. Смоделируйте следующие отношения в E/R.

  •  Квартира расположена в доме на улице в городе в стране
  • Две команды играют друг против друга в футбол под руководством арбитра
  • У каждого человека (мужчины и женщины) есть отец и мать

Задача 3. Смоделируйте E/R-модель в виде E/R диаграммы

Задание 3

  1. Почему любое отношение в реляционной схеме имеет по крайней мере один ключ?
  2. Переведите все диаграммы ER из предыдущей домашней работы в реляционные схемы.
  3. Переведите приведенные диаграммы ER в реляционные схемы.
    3.1. https://imgur.com/w2iDI1o
    3.2. https://imgur.com/oFBM5pp

Соглашение о приеме работ

  • В папке с названием задания, создается папка с фамилией студента, в которой он работает
  • Текстовые файлы оформляются в формате .md
  • Изображения лежат рядом, в .md указываем ссылку
  • Срок сдачи - до 23:59 25.09.2021.
  • Комиты можно писать на русском языке

Задание 4

Задача 1

Возьмите библиотечную систему, схему которой сделали на предыдущем задании

Reader( ID, LastName, FirstName, Address, BirthDate)
Book ( ISBN, Title, Author, PagesNum, PubYear, PubName)
Publisher ( PubName, PubAdress)
Category ( CategoryName, ParentCat)
Copy ( ISBN, CopyNumber, ShelfPosition)
Borrowing ( ReaderNr, ISBN, CopyNumber, ReturnDate)
BookCat ( ISBN, CategoryName )

Напишите SQL-запросы (или выражения реляционной алгебры) для следующих вопросов:

а) Какие фамилии читателей в Москве?
б) Какие книги (author, title) брал Иван Иванов?
в) Какие книги (ISBN) из категории "Горы" не относятся к категории "Путешествия"? Подкатегории не обязательно принимать во внимание!
г) Какие читатели (LastName, FirstName) вернули копию книги?
д) Какие читатели (LastName, FirstName) брали хотя бы одну книгу (не копию), которую брал также Иван Иванов (не включайте Ивана Иванова в результат)?

Задача 2

Возьмите схему для Поездов, которую выполняли в предыдущем задании.

City ( Name, Region )
Station ( Name, #Tracks, CityName, Region )
Train ( TrainNr, Length, StartStationName, EndStationName )
Connection ( FromStation, ToStation, TrainNr, Departure, Arrival)

Предположим, что отношение "Connection" уже содержит транзитивное замыкание. Когда поезд 101 отправляется из Москвы в Санкт-Петербург через Тверь, содержит кортежи для связи Москва->Тверь, Тверь-Санкт-Петербург и Москва->Санкт-Петербург. Сформулируйте следующие запросы в реляционной алгебре:

а) Найдите все прямые рейсы из Москвы в Тверь.
б) Найдите все многосегментные маршруты, имеющие точно однодневный трансфер из Москвы в Санкт-Петербург (первое отправление и прибытие в конечную точку должны быть в одну и ту же дату). Вы можете применить функцию DAY () к атрибутам Departure и Arrival, чтобы определить дату.
в) Что изменится в выражениях для а) и б), если отношение "Connection" не содержит дополнительных кортежей для транзитивного замыкания, поэтому многосегментный маршрут Москва-> Тверь-> Санкт-Петербург содержит только кортежи Москва-> Тверь и Тверь-Санкт-Петербург?

Задача 3

Представьте внешнее объединение (outer join ) в виде выражения реляционной алгебры с использованием только базовых операций (select, project, cartesian, rename, union, minus)

Соглашение о приеме работ

  • В папке с названием задания, создается папка с фамилией студента, в которой он работает
  • Текстовые файлы оформляются в формате .md
  • Изображения лежат рядом, в .md указываем ссылку
  • Срок сдачи - до 18:00 03.09.2021.
  • Комиты можно писать на русском языке

Задание 5

Задача 1

Возьмите реляционную схему для библиотеки сделаную в задании 3.1:

  • Reader( number, LastName, FirstName, Address, BirthDate)

  • Book ( isbn, Title, Author, PagesNum, PubYear, PubName)

  • Publisher ( PubName, PubAdress)

  • Category ( CategoryName, ParentCat)

  • Copy ( ISBN, CopyNumber,, ShelfPosition)

  • Borrowing ( ReaderNr, ISBN, CopyNumber, ReturnDate)

  • BookCat ( ISBN, CategoryName )

Напишите SQL-запросы:

  • Показать все названия книг вместе с именами издателей.
  • В какой книге наибольшее количество страниц?
  • Какие авторы написали более 5 книг?
  • В каких книгах более чем в два раза больше страниц, чем среднее количество страниц для всех книг?
  • Какие категории содержат подкатегории?
  • У какого автора (предположим, что имена авторов уникальны) написано максимальное количество книг?
  • Какие читатели забронировали все книги (не копии), написанные "Марком Твеном"?
  • Какие книги имеют более одной копии?
  • ТОП 10 самых старых книг
  • Перечислите все категории в категории “Спорт” (с любым уровнем вложености).

Задача 2

Напишите SQL-запросы для следующих действий:

  • Добавьте запись о бронировании читателем ‘Василеем Петровым’ книги с ISBN 123456 и номером копии 4.
  • Удалить все книги, год публикации которых превышает 2000 год.
  • Измените дату возврата для всех книг категории "Базы данных", начиная с 01.01.2016, чтобы они были в заимствовании на 30 дней дольше (предположим, что в SQL можно добавлять числа к датам).

Задача 3

Рассмотрим следующую реляционную схему:

  • Student( MatrNr, Name, Semester )
  • Check( MatrNr, LectNr, ProfNr, Note )
  • Lecture( LectNr, Title, Credit, ProfNr )
  • Professor( ProfNr, Name, Room )

Опишите на русском языке результаты следующих запросов:

SELECT s.Name, s.MatrNr FROM Student s 
  WHERE NOT EXISTS ( 
    SELECT * FROM Check c WHERE c.MatrNr = s.MatrNr AND c.Note >= 4.0 ) ; 
( SELECT p.ProfNr, p.Name, sum(lec.Credit) 
FROM Professor p, Lecture lec 
WHERE p.ProfNr = lec.ProfNr
GROUP BY p.ProfNr, p.Name)
UNION
( SELECT p.ProfNr, p.Name, 0 
FROM Professor p
WHERE NOT EXISTS ( 
  SELECT * FROM Lecture lec WHERE lec.ProfNr = p.ProfNr )); 
SELECT s.Name, p.Note
  FROM Student s, Lecture lec, Check c
  WHERE s.MatrNr = c.MatrNr AND lec.LectNr = c.LectNr AND c.Note >= 4 
    AND c.Note >= ALL ( 
      SELECT c1.Note FROM Check c1 WHERE c1.MatrNr = c.MatrNr ) 

Модуль 2

Задание 6

Установить PostrgeSQL локально. Создать базу данных.

Пример датасета для Oracle (для примера): http://pastebin.com/dEqPSAk3

Описание дата сета

У спортсмена есть олимпийское удостоверение, имя, пол, страна и дата рождения. У каждой олимпиады есть год, сезон (летний или зимний), страна, где она проходила, и город. Каждый спортсмен в базе данных участвует по крайней мере в одной олимпиаде. Спортсмен может участвовать в нескольких соревнованиях на одной Олимпиаде и фактически может участвовать более чем в одной Олимпиаде. Например, Майкл Армстронг участвовал в соревнованиях по плаванию, дайвингу и водному поло. Ян Торп участвовал в летних Олимпийских играх 2000 года в Сиднее и завоевал 3 золотые и 2 серебряные медали. В Афинах 2004 года он завоевал две золотые, одну серебряную и одну бронзовую медали. У события есть название вида спорта, название события, место проведения, а также запланированное время и дата, какие спортсмены должны были участвовать в соревнованиях, в каких соревнованиях и как они разместились, и кто был победителем (победителями) события (например, какой медалью они были награждены). Вы можете предположить, что нулевые значения используются для победителей и мест размещения до тех пор, пока событие не будет проведено. Соревнования на Олимпийских играх могут быть как индивидуальными, так и командными. Если это командное мероприятие, мы хотим знать, кто был членом каждой команды.

Задание

Напишие SQL запросы

  • Для Олимпийских игр 2004 года сгенерируйте список (год рождения, количество игроков, количество золотых медалей), содержащий годы, в которые родились игроки, количество игроков, родившихся в каждый из этих лет, которые выиграли по крайней мере одну золотую медаль, и количество золотых медалей, завоеванных игроками, родившимися в этом году.
  • Перечислите все индивидуальные (не групповые) соревнования, в которых была ничья в счете, и два или более игрока выиграли золотую медаль.
  • Найдите всех игроков, которые выиграли хотя бы одну медаль (GOLD, SILVER и BRONZE) на одной Олимпиаде. (player-name, olympic-id).
  • В какой стране был наибольший процент игроков (из перечисленных в наборе данных), чьи имена начинались с гласной?
  • Для Олимпийских игр 2000 года найдите 5 стран с минимальным соотношением количества групповых медалей к численности населения.

Задание 7

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

Пример фейкера, как источника данных, для PHP - https://github.com/fzaninotto/Faker

Задание 8

Задача 1

Возьмите схему библиотечной системы из задания 2, и создайте на ее основе таблицы, лучше на основе миграций.

Задача 2

  • Создайте модели
  • Напишите или используйте готовый генератор данных для всех таблиц
  • Создаете CRUD (Create, Read, Delete, Update) операции в виде REST API
    • Книг и экземпляров
    • Бронирования (В списке с бронированием нужно выводить данные по читателю и по книге)

Для Java можете использовать руководство - https://spring.io/guides/gs/accessing-data-jpa/.