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 курс)
- Host: GitHub
- URL: https://github.com/hummel009/databases-ii
- Owner: Hummel009
- License: gpl-3.0
- Created: 2024-02-25T11:22:34.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-12T20:43:02.000Z (over 2 years ago)
- Last Synced: 2024-03-12T21:48:44.253Z (over 2 years ago)
- Topics: database, db, mysql
- Language: SQL
- Homepage:
- Size: 38.1 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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 – Создать хранимую процедуру, выполняющую подсчёт количества записей в указанной таблице таким образом, чтобы она возвращала максимально корректные данные, даже если для достижения этого результата придётся пожертвовать производительностью.