
5сем / lab4_database
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
доц., канд. техн. наук |
|
|
|
Б.К.Акопян |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4 |
ФИЗИЧЕСКА РЕАЛИЗАЦИЯ РЕЛЯЦИОННОЙ БАЗЫ ДАННЫХ НА СЕРВЕРЕ |
по курсу: БАЗЫ ДАННЫХ |
|
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4016 |
|
|
|
М.О. Жовтяк |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2022
Цель работы
Физическая реализация реляционной базы данных на сервере.
Вариант работы
Вариант 14.
Библиотека в Хоббитонии есть библиотека «Башня Саурумана». Вы являетесь ее руководителем. Библиотека зарабатывает деньги, выдавая напрокат некоторые книги, имеющиеся в небольшом количестве экземпляров. Одной из задач разрабатываемой ИС является отслеживание финансовых показателей работы библиотеки. У каждой книги, выдаваемой в прокат, есть название, автор, жанр. В зависимости от ценности книги Вы определили для каждой из них залоговую стоимость (сумма, вносимая клиентом при взятии книги напрокат) и стоимость проката (сумма, которую клиент платит при возврате книги, получая назад залог). В библиотеку обращаются читатели. Все читатели регистрируются в картотеке, указывая свои персональные данные. Каждый читатель может обращаться в библиотеку несколько раз. Все обращения читателей фиксируются, при этом по каждому факту выдачи книги запоминаются дата выдачи и ожидаемая дата возврата. Стоимость проката книги должна зависеть не только от самой книги, но и от срока ее проката. Кроме того, необходимо добавить систему штрафов за вред, нанесенный книге и систему скидок для некоторых категорий читателей. Произведения авторов, составляющие библиотечный фонд, также можно разделить на различные категории, характеризующиеся собственным набором атрибутов: учебники, повести, романы, статьи, стихи, диссертации, рефераты, тезисы докладов и т.д. Сотрудники библиотеки, работающие в различных залах различных библиотек, ведут учет читателей, а также учет размещения и выдачи литературы.
Ход работы
Экспортируется модель данных, спроектированная в ходе предыдущей лабораторной работы (рис. 1). Результат экспорта представлен на рисунках 2-5.
Рисунок 1 – Модель данных
Рисунок 2 – Определение полного имени файла для сохранения скрипта БД
Рисунок 3 – Определение объектов БД
Рисунок 4 – Просмотр сгенерированного программного кода
Рисунок 5 – Результат выполнения скрипта на создание БД
Теперь таблицы заполняются данными. Заполнение таблицы employee представлено на рисунке 6.
Рисунок 6 – Заполнение таблицы employee
Выполняется заполнение таблицы readers. Результат представлен на рисунке 7.
Рисунок 7 – Заполнение таблицы readers
Выполняется заполнение таблицы authors. Результат представлен на рисунке 8.
Рисунок 8 – Заполнение таблицы authors
Выполняется заполнение таблицы genres. Результат представлен на рисунке 9.
Рисунок 9 – Заполнение таблицы genres
Выполняется заполнение таблицы library_place. Результат представлен на рисунке 10.
Рисунок 10 – Заполнение таблицы library_place
Выполняется заполнение таблицы books. Результат представлен на рисунке 11.
Рисунок 11 – Заполнение таблицы books
Выполняется заполнение таблицы appeals. Результат представлен на рисунке 12. Столбец total не заполнен, так как еще не создан код, который бы вычислял итоговую стоимость аренды книги.
Рисунок 11 – Заполнение таблицы appeals
Заполнение БД данными завершено. Выполняется дамп базы. Результат представлен на рисунках 12-13
Рисунок 12 – Настройка параметров экспорта БД и объектов БД
Рисунок 13 – Результат экспорта
Вывод
В ходе лабораторной работы я углубил знания работы с реляционной базой данных MySQL Workbench. Была выполнена реализация БД на сервере с помощью скрипта импортированного из модели БД, после чего БД была заполнена данными.
В ходе работы проблем не возникло.
Приложение А
-- MySQL Script generated by MySQL Workbench
-- Mon Oct 31 13:28:06 2022
-- Model: New Model Version: 1.0
-- MySQL Workbench Forward Engineering
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- -----------------------------------------------------
-- Schema my_library
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema my_library
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `my_library` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
USE `my_library` ;
-- -----------------------------------------------------
-- Table `my_library`.`Authors`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `my_library`.`Authors` (
`id_author` INT NOT NULL AUTO_INCREMENT,
`author_FIO` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id_author`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `my_library`.`Library_place`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `my_library`.`Library_place` (
`id_place` INT NOT NULL AUTO_INCREMENT,
`department` VARCHAR(45) NOT NULL,
`number_shelf` INT NOT NULL,
PRIMARY KEY (`id_place`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `my_library`.`Genres`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `my_library`.`Genres` (
`id_genre` INT NOT NULL AUTO_INCREMENT,
`name_genre` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id_genre`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `my_library`.`Books`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `my_library`.`Books` (
`id_book` INT NOT NULL AUTO_INCREMENT,
`id_author` INT NOT NULL,
`id_place` INT NOT NULL,
`id_genre` INT NOT NULL,
`title_book` VARCHAR(255) NOT NULL,
`deposit` INT NOT NULL,
`coast_per_day` INT NOT NULL,
PRIMARY KEY (`id_book`),
INDEX `id_author_idx` (`id_author` ASC) VISIBLE,
INDEX `id_place_idx` (`id_place` ASC) VISIBLE,
INDEX `id_genre_idx` (`id_genre` ASC) VISIBLE,
CONSTRAINT `id_author`
FOREIGN KEY (`id_author`)
REFERENCES `my_library`.`Authors` (`id_author`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `id_place`
FOREIGN KEY (`id_place`)
REFERENCES `my_library`.`Library_place` (`id_place`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `id_genre`
FOREIGN KEY (`id_genre`)
REFERENCES `my_library`.`Genres` (`id_genre`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `my_library`.`Readers`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `my_library`.`Readers` (
`id_reader` INT NOT NULL,
`reader_FIO` VARCHAR(255) NOT NULL,
`discount_reader` INT NOT NULL,
`telephone` VARCHAR(10) NOT NULL,
PRIMARY KEY (`id_reader`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `my_library`.`Employee`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `my_library`.`Employee` (
`id_employee` INT NOT NULL AUTO_INCREMENT,
`employee_FIO` VARCHAR(255) NOT NULL,
`employee_telephone` VARCHAR(10) NOT NULL,
PRIMARY KEY (`id_employee`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `my_library`.`Appeals`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `my_library`.`Appeals` (
`id_appeal` INT NOT NULL AUTO_INCREMENT,
`id_book` INT NOT NULL,
`id_reader` INT NOT NULL,
`id_employee` INT NOT NULL,
`issue_date` DATE NOT NULL,
`return_day_expected` DATE NOT NULL,
`return_day` DATE NOT NULL,
`total` INT NULL,
PRIMARY KEY (`id_appeal`),
INDEX `id_book_idx` (`id_book` ASC) VISIBLE,
INDEX `id_reader_idx` (`id_reader` ASC) VISIBLE,
INDEX `id_employee_idx` (`id_employee` ASC) VISIBLE,
CONSTRAINT `id_book`
FOREIGN KEY (`id_book`)
REFERENCES `my_library`.`Books` (`id_book`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `id_reader`
FOREIGN KEY (`id_reader`)
REFERENCES `my_library`.`Readers` (`id_reader`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `id_employee`
FOREIGN KEY (`id_employee`)
REFERENCES `my_library`.`Employee` (`id_employee`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Приложение Б
USE my_library;
INSERT INTO employee (employee_FIO, employee_telephone)
VALUES ('Анна Борисовна Кличко', '7905375833'),
('Светлана Петровна Ернеску', '7914739287'),
('Маргарита Ивановна Бледная', '7915385676');
SELECT * FROM employee;
USE my_library;
INSERT INTO readers (id_reader, reader_FIO, discount_reader, telephone)
VALUES (1, 'Волынский Кирилл Иванович', 10, '7905375833'),
(2, 'Головина Анна Владиславовна', 0, '7915375863'),
(3, 'Тихонов Роман Данилович', 0, '7905345863'),
(4, 'Лосев Александр Фёдорович', 0, '7909375863'),
(5, 'Иванова Лада Глебовна', 10, '7915785863'),
(6, 'Борисова Мария Денисовна', 0, '7910975863'),
(7, 'Семенова Виктория Григорьевна', 010, '7915375883');
SELECT * FROM readers;
USE my_library;
INSERT INTO authors (author_FIO)
VALUES ('Пушкин Александр Сергеевич'),
('Достоевский Федор Михайлович'),
('Толстой Лев Николаевич'),
('Тургенев Иван Сергеевич');
SELECT * FROM authors;
USE my_library;
INSERT INTO genres (name_genre)
VALUES ('Приключения'),
('Исторический роман'),
('Любовный роман'),
('Детектив'),
('Фантастика');
SELECT * FROM genres;
USE my_library;
INSERT INTO library_place (department, number_shelf)
VALUES ('Архив', 1),
('Архив', 2),
('Архив', 3),
('Стеллаж', 1),
('Стеллаж', 2),
('Стеллаж', 3);
SELECT * FROM library_place;
USE my_library;
INSERT INTO books (id_author, id_place, id_genre, title_book, deposit, coast_per_day)
VALUES (1, 1, 2, 'Капитанская дочка', 100, 10),
(1, 2, 3, 'Дубровский', 50, 5),
(2, 3, 2, 'Преступление и наказание', 150, 15),
(2, 4, 5, 'Бесы', 100, 10),
(3, 5, 2, 'Война и мир', 200, 20),
(3, 6, 3, 'Анна Каренина', 100, 10),
(4, 1, 2, 'Отцы и дети', 100, 10),
(4, 2, 1, 'Муму', 150, 15);
SELECT * FROM books;
USE my_library;
INSERT INTO appeals (id_book, id_reader, id_employee, issue_date, return_day_expected, return_day)
VALUES (1, 1, 7, '2022-10-16', '2022-10-20', '2022-10-20'),
(2, 2, 8, '2022-10-17', '2022-10-21', '2022-10-22'),
(3, 3, 9, '2022-10-17', '2022-10-20', '2022-10-20'),
(4, 4, 7, '2022-10-17', '2022-10-24', '2022-10-24'),
(5, 5, 8, '2022-10-18', '2022-10-30', '2022-10-31'),
(6, 6, 9, '2022-10-18', '2022-10-25', '2022-10-25'),
(7, 7, 7, '2022-10-19', '2022-10-27', '2022-10-27'),
(8, 1, 8, '2022-10-19', '2022-10-28', '2022-10-28'),
(1, 2, 9, '2022-10-20', '2022-10-28', '2022-10-29'),
(2, 3, 7, '2022-10-20', '2022-10-29', '2022-10-29');
SELECT * FROM appeals;
Список использованных источников
Учебно-методическое пособие «Разработка и администрирование базы данных с открытым исходным кодом» - Аграновский А.В., В.В. Боженко, Е.Л. Турнецкая, 2022 г.