{"id":20207440,"url":"https://github.com/hummel009/databases-ii","last_synced_at":"2025-05-07T06:31:41.745Z","repository":{"id":224337927,"uuid":"763029447","full_name":"Hummel009/Databases-II","owner":"Hummel009","description":"БД - лабораторные работы БГУИР (3 курс)","archived":false,"fork":false,"pushed_at":"2024-03-12T20:43:02.000Z","size":39,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-03-12T21:48:44.253Z","etag":null,"topics":["database","db","mysql"],"latest_commit_sha":null,"homepage":"","language":"SQL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hummel009.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-25T11:22:34.000Z","updated_at":"2024-02-25T11:25:42.000Z","dependencies_parsed_at":"2024-02-27T13:31:29.685Z","dependency_job_id":null,"html_url":"https://github.com/Hummel009/Databases-II","commit_stats":null,"previous_names":["hummel009/databases-ii"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hummel009%2FDatabases-II","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hummel009%2FDatabases-II/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hummel009%2FDatabases-II/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hummel009%2FDatabases-II/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hummel009","download_url":"https://codeload.github.com/Hummel009/Databases-II/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224573126,"owners_count":17333798,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","db","mysql"],"created_at":"2024-11-14T05:29:09.884Z","updated_at":"2024-11-14T05:29:10.386Z","avatar_url":"https://github.com/Hummel009.png","language":"SQL","funding_links":[],"categories":[],"sub_categories":[],"readme":"Мои лабораторные работы для BSUIR/БГУИР (белорусский государственный университет информатики и радиоэлектроники).\n\nПредмет - BD/БД (базы данных).\n\n## Условия\n\n### Лабораторная работа 1\n\n* Скачайте и установите СУБД (выбрано: MySQL Community Server).\n* Скачайте и установите средство управления для выбранной вами СУБД (выбрано: MySQL Workbench).\n* Создайте базы данных “library” и “exploration” и наполните их данными (см. скрипты в папке init).\n* Удостоверьтесь, написав и выполнив соответствующие SELECT-запросы, что все данные корректно добавились в обе базы данных.\n* Создайте резервную копию полученных баз данных.\n\nФорма отчётности: два файла с резервными копиями баз данных (“library” и “exploration”).\n\n### Лабораторная работа 2\n\nНапишите SQL-запросы для решения следующих задач:\n\n* 1 – показать всю информацию об авторах.\n* 2 – показать всю информацию о жанрах.\n* 5 – показать, сколько всего читателей зарегистрировано в библиотеке.\n* 13 – показать идентификаторы всех «самых читающих читателей», взявших в библиотеке больше всего книг.\n* 14 – показать идентификатор «читателя-рекордсмена», взявшего в библиотеке больше книг, чем любой другой читатель.\n\n### Лабораторная работа 3\n\nНапишите SQL-запросы для решения следующих задач:\n\n* 1 – показать список книг, у которых более одного автора.\n* 5 – показать список книг, которые когда-либо были взяты читателями.\n* 6 – показать список книг, которые никто из читателей никогда не брал.\n* 15 – показать всех авторов и количество книг (не экземпляров книг, а «книг как изданий») по каждому автору.\n* 23 – показать читателя, последним взявшего в библиотеке книгу.\n\n### Лабораторная работа 4\n\nНапишите SQL-запросы для решения следующих задач:\n\n* 1 – добавить в базу данных информацию о троих новых читателях: «Орлов О.О.», «Соколов С.С.», «Беркутов Б.Б.».\n* 5 – отразить в базе данных информацию о том, что каждый из троих добавленных читателей 20-го января 2016-го года на месяц взял в библиотеке книгу «Курс теоретической физики».\n* 6 – добавить в базу данных пять любых авторов и десять книг этих авторов (по две на каждого); если понадобится, добавить в базу данных соответствующие жанры. Отразить авторство добавленных книг и их принадлежность к соответствующим жанрам.\n* 15 – добавить в базу данных жанры «Политика», «Психология», «История».\n* 23 – удалить все книги, относящиеся к жанру «Классика».\n\n### Лабораторная работа 5\n\nНапишите SQL-запросы для решения следующих задач:\n\n* 2 – создать кэширующее представление, позволяющее получать список всех книг и их жанров (две колонки: первая – название книги, вторая – жанры книги, перечисленные через запятую).\n* 3 – создать кэширующее представление, позволяющее получать список всех авторов и их книг (две колонки: первая – имя автора, вторая – написанные автором книги, перечисленные через запятую).\n* 15 – создать триггер, допускающий регистрацию в библиотеке только таких авторов, имя которых не содержит никаких символов кроме букв, цифр, знаков - (минус), ' (апостроф) и пробелов (не допускается два и более идущих подряд пробела).\n* 16 – создать триггер, корректирующий название книги таким образом, чтобы оно удовлетворяло следующим условиям:\n  * не допускается наличие пробелов в начале и конце названия;\n  * не допускается наличие повторяющихся пробелов; \n  * первая буква в названии всегда должна быть заглавной.\n* 17 – создать триггер, меняющий дату выдачи книги на текущую, если указанная в INSERT- или UPDATE-запросе дата выдачи книги меньше текущей на полгода и более.\n\n### Лабораторная работа 6\n\nНапишите SQL-запросы для решения следующих задач:\n\n* 1 – создать хранимую функцию, получающую на вход идентификатор читателя и воз-вращающую список идентификаторов книг, которые он уже прочитал и вернул в библиотеку.\n* 3 – создать хранимую функцию, получающую на вход идентификатор читателя и воз-вращающую 1, если у читателя на руках сейчас менее десяти книг, и 0 в противном случае.\n* 4 – создать хранимую функцию, получающую на вход год издания книги и возвращаю-щую 1, если книга издана менее ста лет назад, и 0 в противном случае.\n* 9 – создать хранимую процедуру, автоматически создающую и наполняющую данными таблицу «arrears», в которой должны быть представлены идентификаторы и имена читателей, у которых до сих пор находится на руках хотя бы одна книга, по которой дата возврата установлена в прошлом относительно текущей даты.\n* 11 – создать хранимую процедуру, удаляющую все представления, для которых SELECT COUNT(1) FROM представление возвращает значение меньше десяти.\n\n### Лабораторная работа 7\n\nНапишите SQL-запросы для решения следующих задач:\n\n* 1 – Создать хранимую процедуру, которая:\n  * a – добавляет каждой книге два случайных жанра;\n  * b – отменяет совершённые действия, если в процессе работы хотя бы одна операция вставки завершилась ошибкой в силу дублирования значения первичного ключа таблицы «m2m_books_genres» (т.е. у такой книги уже был такой жанр).\n* 2 – Создать хранимую процедуру, которая:\n  * a – увеличивает значение поля «b_quantity» для всех книг в два раза;\n  * b – отменяет совершённое действие, если по итогу выполнения операции среднее количество экземпляров книг превысит значение 50.\n* 3 – Написать запросы, которые, будучи выполненными параллельно, обеспечивали бы следующий эффект:\n  * a – первый запрос должен считать количество выданных на руки и возвращённых в библиотеку книг и не зависеть от запросов на обновление таблицы «subscriptions» (не ждать их завершения);\n  * b – второй запрос должен инвертировать значения поля «sb_is_active» таблицы subscriptions с «Y» на «N» и наоборот и не зависеть от первого запроса (не ждать его завершения).\n* 5 – Написать код, в котором запрос, инвертирующий значения поля «sb_is_active» таблицы «subscriptions» с «Y» на «N» и наоборот, будет иметь максимальные шансы на успешное завершение в случае возникновения ситуации взаимной блокировки с другими транзакциями. \n* 8 – Создать хранимую процедуру, выполняющую подсчёт количества записей в указанной таблице таким образом, чтобы она возвращала максимально корректные данные, даже если для достижения этого результата придётся пожертвовать производительностью.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhummel009%2Fdatabases-ii","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhummel009%2Fdatabases-ii","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhummel009%2Fdatabases-ii/lists"}