An open API service indexing awesome lists of open source software.

https://github.com/hummel009/databases-ii

БД - лабораторные работы БГУИР (3 курс)
https://github.com/hummel009/databases-ii

database db mysql

Last synced: about 1 year ago
JSON representation

БД - лабораторные работы БГУИР (3 курс)

Awesome Lists containing this project

README

          

Мои лабораторные работы для BSUIR/БГУИР (белорусский государственный университет информатики и радиоэлектроники).

Предмет - BD/БД (базы данных).

## Условия

### Лабораторная работа 1

* Скачайте и установите СУБД (выбрано: MySQL Community Server).
* Скачайте и установите средство управления для выбранной вами СУБД (выбрано: MySQL Workbench).
* Создайте базы данных “library” и “exploration” и наполните их данными (см. скрипты в папке init).
* Удостоверьтесь, написав и выполнив соответствующие SELECT-запросы, что все данные корректно добавились в обе базы данных.
* Создайте резервную копию полученных баз данных.

Форма отчётности: два файла с резервными копиями баз данных (“library” и “exploration”).

### Лабораторная работа 2

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

* 1 – показать всю информацию об авторах.
* 2 – показать всю информацию о жанрах.
* 5 – показать, сколько всего читателей зарегистрировано в библиотеке.
* 13 – показать идентификаторы всех «самых читающих читателей», взявших в библиотеке больше всего книг.
* 14 – показать идентификатор «читателя-рекордсмена», взявшего в библиотеке больше книг, чем любой другой читатель.

### Лабораторная работа 3

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

* 1 – показать список книг, у которых более одного автора.
* 5 – показать список книг, которые когда-либо были взяты читателями.
* 6 – показать список книг, которые никто из читателей никогда не брал.
* 15 – показать всех авторов и количество книг (не экземпляров книг, а «книг как изданий») по каждому автору.
* 23 – показать читателя, последним взявшего в библиотеке книгу.

### Лабораторная работа 4

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

* 1 – добавить в базу данных информацию о троих новых читателях: «Орлов О.О.», «Соколов С.С.», «Беркутов Б.Б.».
* 5 – отразить в базе данных информацию о том, что каждый из троих добавленных читателей 20-го января 2016-го года на месяц взял в библиотеке книгу «Курс теоретической физики».
* 6 – добавить в базу данных пять любых авторов и десять книг этих авторов (по две на каждого); если понадобится, добавить в базу данных соответствующие жанры. Отразить авторство добавленных книг и их принадлежность к соответствующим жанрам.
* 15 – добавить в базу данных жанры «Политика», «Психология», «История».
* 23 – удалить все книги, относящиеся к жанру «Классика».

### Лабораторная работа 5

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

* 2 – создать кэширующее представление, позволяющее получать список всех книг и их жанров (две колонки: первая – название книги, вторая – жанры книги, перечисленные через запятую).
* 3 – создать кэширующее представление, позволяющее получать список всех авторов и их книг (две колонки: первая – имя автора, вторая – написанные автором книги, перечисленные через запятую).
* 15 – создать триггер, допускающий регистрацию в библиотеке только таких авторов, имя которых не содержит никаких символов кроме букв, цифр, знаков - (минус), ' (апостроф) и пробелов (не допускается два и более идущих подряд пробела).
* 16 – создать триггер, корректирующий название книги таким образом, чтобы оно удовлетворяло следующим условиям:
* не допускается наличие пробелов в начале и конце названия;
* не допускается наличие повторяющихся пробелов;
* первая буква в названии всегда должна быть заглавной.
* 17 – создать триггер, меняющий дату выдачи книги на текущую, если указанная в INSERT- или UPDATE-запросе дата выдачи книги меньше текущей на полгода и более.

### Лабораторная работа 6

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

* 1 – создать хранимую функцию, получающую на вход идентификатор читателя и воз-вращающую список идентификаторов книг, которые он уже прочитал и вернул в библиотеку.
* 3 – создать хранимую функцию, получающую на вход идентификатор читателя и воз-вращающую 1, если у читателя на руках сейчас менее десяти книг, и 0 в противном случае.
* 4 – создать хранимую функцию, получающую на вход год издания книги и возвращаю-щую 1, если книга издана менее ста лет назад, и 0 в противном случае.
* 9 – создать хранимую процедуру, автоматически создающую и наполняющую данными таблицу «arrears», в которой должны быть представлены идентификаторы и имена читателей, у которых до сих пор находится на руках хотя бы одна книга, по которой дата возврата установлена в прошлом относительно текущей даты.
* 11 – создать хранимую процедуру, удаляющую все представления, для которых SELECT COUNT(1) FROM представление возвращает значение меньше десяти.

### Лабораторная работа 7

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

* 1 – Создать хранимую процедуру, которая:
* a – добавляет каждой книге два случайных жанра;
* b – отменяет совершённые действия, если в процессе работы хотя бы одна операция вставки завершилась ошибкой в силу дублирования значения первичного ключа таблицы «m2m_books_genres» (т.е. у такой книги уже был такой жанр).
* 2 – Создать хранимую процедуру, которая:
* a – увеличивает значение поля «b_quantity» для всех книг в два раза;
* b – отменяет совершённое действие, если по итогу выполнения операции среднее количество экземпляров книг превысит значение 50.
* 3 – Написать запросы, которые, будучи выполненными параллельно, обеспечивали бы следующий эффект:
* a – первый запрос должен считать количество выданных на руки и возвращённых в библиотеку книг и не зависеть от запросов на обновление таблицы «subscriptions» (не ждать их завершения);
* b – второй запрос должен инвертировать значения поля «sb_is_active» таблицы subscriptions с «Y» на «N» и наоборот и не зависеть от первого запроса (не ждать его завершения).
* 5 – Написать код, в котором запрос, инвертирующий значения поля «sb_is_active» таблицы «subscriptions» с «Y» на «N» и наоборот, будет иметь максимальные шансы на успешное завершение в случае возникновения ситуации взаимной блокировки с другими транзакциями.
* 8 – Создать хранимую процедуру, выполняющую подсчёт количества записей в указанной таблице таким образом, чтобы она возвращала максимально корректные данные, даже если для достижения этого результата придётся пожертвовать производительностью.