Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готовые отчеты (2020) / Java. Лабораторная работа 10.pdf
Скачиваний:
51
Добавлен:
29.01.2021
Размер:
676.12 Кб
Скачать

Федеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники

ЛАБОРАТОРНАЯ РАБОТА №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

review_name

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