
Федеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники
ЛАБОРАТОРНАЯ РАБОТА №10
по дисциплине «Разработка Java-приложений управления телекоммуникациями»
Выполнил: студент 3-го курса дневного отделения группы ИКПИ-85
Коваленко Леонид Александрович Преподаватель:
доцент кафедры ПИиВТ Белая Татьяна Иоанновна
Санкт-Петербург
2020

Цель работы Разработать схему базы данных и реализовать её в выбранной СУБД.
Ход работы
Задание №1.
Вкачестве предметной области выбрана тема «Рецензируемый архив работ» (отчасти похоже на «Раздел 1. Работы обучающихся» пункта «Портфолио» личного кабинета СПбГУТ).
Задание №2.
Разработаем логическую модель базы данных.
Вмодели будут присутствовать 4 вида сущностей:
1.Работы (таблица Works).
2.Авторы (таблица Authors).
3.Пользователи (таблица Users).
4.Рецензии (таблица Reviews).
Также в модели будут присутствовать все виды отношений:
1.Работа *:* Автор (многие ко многим).
2.Пользователь 1:* Рецензия (один ко многим и наоборот).
3.Рецензия *:1 Работа (многие к одному и наоборот).
4.Пользователь 1:0..1 Автор (один к нулю..одному).
Отношение «многие ко многим» нельзя установить напрямую, поэтому создадим вспомогательную промежуточную таблицу WorksAuthors.
Логическая схема базы данных приведена на рис. 11.
Рисунок 1 — Логическая схема базы данных
1Логическая схема базы данных сделана в DB Designer Online: https://www.dbdesigner.net/
2
Задание №3.
Разработаем физическую модель базы данных. Используемая СУБД:
MySQL ver 8.0.22 for Linux on x86_64 (MySQL Community Server — GPL)
Используемая операционная система:
Linux Debian 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux
Описание создаваемой физической модели базы данных: 1. Таблица Users («Пользователи»).
1.1) id — идентификатор пользователя (INT, первичный ключ, непустое, авто-инкремент).
1.2) email — почтовый ящик (и логин для входа) (VARCHAR(32), непустое, уникальное).
1.3) password — пароль для входа (VARCHAR(64), непустое). 1.4) name — имя (VARCHAR(32), непустое).
1.5) surname — фамилия (VARCHAR(32), непустое).
1.6) patronymic — отчество (VARCHAR(32), по умолчанию: NULL). 2. Таблица Authors («Авторы»).
2.1) id — идентификатор автора (INT, внешний ключ → Users.id, непустое).
2.2) is_public — публичность для пользователей (TINYINT, непустое). 2.3) nickname — псевдоним (VARCHAR(32), непустое).
3. Таблица Works («Работы»).
3.1) id — идентификатор работы (INT, первичный ключ, непустое, автоинкремент).
3.2) name — название работы (VARCHAR(64), непустое).
3.3) description — описание работы (VARCHAR(256), непустое).
3.4) file — путь к файлу работы на сервере (VARCHAR(128), непустое). 4. Таблица WorksAuthors («Работы авторов»).
4.1) work_id — идентификатор работы (INT, внешний ключ → Works.id, непустое).
3

4.2) author_id — идентификатор автора (INT, внешний ключ → Authors.id, непустое).
5. Таблица Reviews («Рецензии»).
5.1) id — идентификатор рецензии (INT, первичный ключ, непустое, авто-инкремент).
5.2) work_id — идентификатор работы (INT, внешний ключ → Works.id, непустое).
5.3) user_id — идентификатор пользователя (INT, внешний ключ → Users.id, непустое).
5.4) — название (заголовок) рецензии (VARCHAR(32), непустое).
5.5) review_content — содержание рецензии (VARCHAR(4096), непустое). Задание №4.
Следующий скрипт создает базу данных под названием Lab10 и формирует нужные таблицы (табл. 1).
Таблица 1 — SQL-скрипт для формирования таблиц в базе данных
-------------------------------------------------------
--Schema Lab10
-------------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `Lab10` DEFAULT CHARACTER SET utf8; USE `Lab10`;
-------------------------------------------------------
--Table `Lab10`.`Users`
-------------------------------------------------------
DROP TABLE IF EXISTS `Lab10`.`Users`;
CREATE TABLE IF NOT EXISTS `Lab10`.`Users` ( `id` INT NOT NULL AUTO_INCREMENT,
`email` VARCHAR(32) NOT NULL, `password` VARCHAR(64) NOT NULL, `name` VARCHAR(32) NOT NULL, `surname` VARCHAR(32) NOT NULL,
`patronymic` VARCHAR(32) NULL DEFAULT NULL, PRIMARY KEY (`id`),
UNIQUE INDEX `email` (`email` ASC)) ENGINE = InnoDB
AUTO_INCREMENT = 6
DEFAULT CHARACTER SET = utf8;
-------------------------------------------------------
--Table `Lab10`.`Authors`
-------------------------------------------------------
DROP TABLE IF EXISTS `Lab10`.`Authors`;
CREATE TABLE IF NOT EXISTS `Lab10`.`Authors` ( `id` INT NOT NULL,
`is_public` TINYINT NOT NULL, `nickname` VARCHAR(32) NOT NULL,
4

INDEX `Authors_fk0` (`id` ASC),
CONSTRAINT `Authors_fk0`
FOREIGN KEY (`id`)
REFERENCES `Lab10`.`Users` (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
-------------------------------------------------------
--Table `Lab10`.`Works`
-------------------------------------------------------
DROP TABLE IF EXISTS `Lab10`.`Works`;
CREATE TABLE IF NOT EXISTS `Lab10`.`Works` ( `id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(64) NOT NULL, `description` VARCHAR(256) NOT NULL, `file` VARCHAR(128) NOT NULL, PRIMARY KEY (`id`))
ENGINE = InnoDB AUTO_INCREMENT = 6
DEFAULT CHARACTER SET = utf8;
-------------------------------------------------------
--Table `Lab10`.`Reviews`
-------------------------------------------------------
DROP TABLE IF EXISTS `Lab10`.`Reviews`;
CREATE TABLE IF NOT EXISTS `Lab10`.`Reviews` (
`id` INT NOT NULL AUTO_INCREMENT, `work_id` INT NOT NULL, `user_id` INT NOT NULL,
`review_name` VARCHAR(32) NOT NULL, `review_content` VARCHAR(4096) NOT NULL, PRIMARY KEY (`id`),
INDEX `Reviews_fk0` (`work_id` ASC), INDEX `Reviews_fk1` (`user_id` ASC), CONSTRAINT `Reviews_fk0`
FOREIGN KEY (`work_id`) REFERENCES `Lab10`.`Works` (`id`),
CONSTRAINT `Reviews_fk1` FOREIGN KEY (`user_id`)
REFERENCES `Lab10`.`Users` (`id`)) ENGINE = InnoDB
AUTO_INCREMENT = 6
DEFAULT CHARACTER SET = utf8;
-------------------------------------------------------
--Table `Lab10`.`WorksAuthors`
-------------------------------------------------------
DROP TABLE IF EXISTS `Lab10`.`WorksAuthors`;
CREATE TABLE IF NOT EXISTS `Lab10`.`WorksAuthors` ( `work_id` INT NOT NULL,
`author_id` INT NOT NULL,
INDEX `WorksAuthors_fk0` (`work_id` ASC), INDEX `WorksAuthors_fk1` (`author_id` ASC), CONSTRAINT `WorksAuthors_fk0`
FOREIGN KEY (`work_id`) REFERENCES `Lab10`.`Works` (`id`),
CONSTRAINT `WorksAuthors_fk1`
FOREIGN KEY (`author_id`) REFERENCES `Lab10`.`Authors` (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
5