Скачиваний:
1
Добавлен:
19.09.2023
Размер:
155.6 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

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

Кафедра информационных управляющих систем

Лабораторная работа № 1

по Б1.О.12 «ПРОГРАММИРОВАНИЕ КРИТИЧЕСКИХ СЕРВИСОВ»

Студент гр. ИСТ-114_____________________________ Д. Г. Горохов

(подпись)

Проверил ___________________________ А. В. Параничев

(оценка и подпись)

Санкт-Петербург

2023 год

Создание таблиц с соотношением «один-ко-многим» с помощью скрипта MySQL для построения IDEF1X-диаграммы

Создание таблиц и заполнение значений представлено с помощью скрипта MySQL (рис. 1 и рис. 2) в онлайн-редакторе dbfiddle.uk (https://dbfiddle.uk/7i4jSF_U)

SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS Exp_Education;

DROP TABLE IF EXISTS Exp_Experience;

DROP TABLE IF EXISTS Exp_Country;

DROP TABLE IF EXISTS Exp_Employment;

DROP TABLE IF EXISTS Genre;

DROP TABLE IF EXISTS Books;

SET FOREIGN_KEY_CHECKS = 1;

CREATE TABLE Exp_Education (

Exp_Education_ID INT(5),

Exp_Education_Name VARCHAR(50),

PRIMARY KEY (Exp_Education_ID)

);

INSERT INTO Exp_Education (Exp_Education_ID, Exp_Education_Name)

VALUES (0, 'Среднее общее'),

(1, 'Среднее профессиональное'),

(2, 'Бакалавриат'),

(3, 'Магистратура'),

(4, 'Аспирантура');

CREATE TABLE Exp_Experience (

Exp_Experience_ID INT(5),

Exp_Experience_Name VARCHAR(50),

PRIMARY KEY (Exp_Experience_ID)

);

INSERT INTO Exp_Experience (Exp_Experience_ID, Exp_Experience_Name)

VALUES (0, '1 год'),

(1, '2-3 года'),

(2, '4-5 лет'),

(3, '> 6 лет');

CREATE TABLE Exp_Employment (

Exp_Employment_ID INT(5),

Exp_Employment_Name VARCHAR(50),

PRIMARY KEY (Exp_Employment_ID)

);

INSERT INTO Exp_Employment (Exp_Employment_ID, Exp_Employment_Name)

VALUES (0, '< 2ч'),

(1, '3-4ч'),

(2, '> 5ч');

CREATE TABLE Genres (

Genres_ID INT(5),

Genres_Name VARCHAR(50),

PRIMARY KEY (Genres_ID)

);

INSERT INTO Genres (Genres_ID, Genres_Name)

VALUES (0, 'Роман'),

(1, 'Комедия'),

(2, 'Поэма'),

(3, 'Трагедия');

CREATE TABLE SubGenres (

SubGenres_ID INT(5),

SubGenres_Name VARCHAR(50),

PRIMARY KEY (SubGenres_ID)

);

INSERT INTO SubGenres (SubGenres_ID, SubGenres_Name)

VALUES

(0,'Роман'),

(1,'Новелла'),

(2,'Короткий рассказ'),

(3,'Басни'),

(4,'Историческая беллетристика');

CREATE TABLE Books (

Books_ID INT(5),

Books_Name VARCHAR(50),

INDEX (Books_Name),

PRIMARY KEY (Books_ID)

);

INSERT INTO Books (Books_ID, Books_Name)

VALUES (0, 'Огненный змей'),

(1, 'Древний механизм'),

(2, 'Один и одинок'),

(3, 'Вкус свободы'),

(4, 'Зовущие к слиянию'),

(5, 'Возьми мое сердце'),

(6, 'Больше нечего терять'),

(7, 'Искусство войны');

CREATE TABLE Exp_Char (

Exp_Char_Name VARCHAR(50),

Exp_Char_Employ INT(5),

Exp_Char_Education INT(5),

Exp_Char_Experience INT(5),

INDEX(Exp_Char_Name),

PRIMARY KEY (Exp_Char_Name),

FOREIGN KEY (Exp_Char_Education) REFERENCES Exp_Education (Exp_Education_ID),

FOREIGN KEY (Exp_Char_Employ) REFERENCES Exp_Employment (Exp_Employment_ID),

FOREIGN KEY (Exp_Char_Experience) REFERENCES Exp_Experience (Exp_Experience_ID)

);

INSERT INTO Exp_Char (Exp_Char_Name, Exp_Char_Education, Exp_Char_Employ, Exp_Char_Experience)

VALUES ('Морозов Евгений',2,2,0),

('Фролова Анна',0,0,2),

('Соколова Мария',4,1,3),

('Исаков Роман',1,2,1),

('Малинин Артур',3,0,3),

('Горбачев Марк',2,1,0),

('Кондратов Роман',0,2,1),

('Зверев Михаил',2,2,1),

('Фомичев Павел',3,1,3),

('Бочарова Дарья',4,2,1);

CREATE TABLE Genres_To_Books (

Relation_ID INT(5),

Genre_GTB_ID INT(5),

SubGenre_GTB_ID INT(5),

Book_GTB_ID INT(5),

PRIMARY KEY (Relation_ID),

FOREIGN KEY (Genre_GTB_ID) REFERENCES Genres (Genres_ID),

FOREIGN KEY (SubGenre_GTB_ID) REFERENCES SubGenres (SubGenres_ID),

FOREIGN KEY (Book_GTB_ID) REFERENCES Books (Books_ID)

);

INSERT INTO Genres_To_Books (Relation_ID, Genre_GTB_ID, SubGenre_GTB_ID, Book_GTB_ID)

VALUES (0,2,3,0),

(1,1,4,7),

(2,3,1,3),

(3,0,2,5),

(4,1,4,6),

(5,3,2,1),

(6,0,1,2),

(7,3,0,4);

CREATE TABLE Experts_To_Books (

Relation_ID INT(5),

Expert_ETB_Name VARCHAR(50),

Book_ETB_ID INT(5),

PRIMARY KEY (Relation_ID),

FOREIGN KEY (Expert_ETB_Name) REFERENCES Exp_Char (Exp_Char_Name),

FOREIGN KEY (Book_ETB_ID) REFERENCES Books (Books_ID)

);

INSERT INTO Experts_To_Books (Relation_ID, Expert_ETB_Name, Book_ETB_ID)

VALUES (0, 'Морозов Евгений', 2),

(1, 'Фролова Анна', 1),

(2, 'Исаков Роман', 7),

(3, 'Малинин Артур', 4),

(4, 'Горбачев Марк', 3),

(5, 'Кондратов Роман', 5),

(6, 'Зверев Михаил', 4),

(7, 'Фомичев Павел', 2),

(8, 'Бочарова Дарья', 6),

(9, 'Соколова Мария', 7);

SELECT * FROM Exp_Char;

SELECT * FROM Exp_Education;

SELECT * FROM Exp_Experience;

SELECT * FROM Exp_Employment;

SELECT * FROM Books;

SELECT * FROM Genres;

SELECT Exp_Char_Name AS 'Эксперт',

education.Exp_Education_Name AS 'Образование',

experience.Exp_Experience_Name AS 'Опыт',

employment.Exp_Employment_Name AS 'Занятость'

FROM Exp_Char AS name

INNER JOIN Exp_Education AS education ON

education.Exp_Education_ID = name.Exp_Char_Education

INNER JOIN Exp_Experience AS experience ON

experience.Exp_Experience_ID = name.Exp_Char_Experience

INNER JOIN Exp_Employment AS employment ON

employment.Exp_Employment_ID = name.Exp_Char_Employ;

SELECT Relation_ID AS 'Индекс',

Books_Name AS 'Название',

Exp_Char_Name AS 'Эксперт'

FROM Experts_To_Books AS ETB

INNER JOIN Exp_Char AS Expert ON Expert_ETB_Name = Exp_Char_Name

INNER JOIN Books AS Book ON Book_ETB_ID = Books_ID

ORDER BY Relation_ID;

SELECT Relation_ID AS 'Индекс',

Genres_Name AS 'Жанр',

SubGenres_Name AS 'Поджанр',

Books_Name AS "Название"

FROM Genres_To_Books AS GTT

INNER JOIN Genres AS Genre_Name ON Genre_GTB_ID = Genres_ID

INNER JOIN SubGenres ON SubGenre_GTB_ID = SubGenres_ID

INNER JOIN Books AS Book ON Book_GTB_ID = Books_ID

ORDER BY Relation_ID;

Рис. 1. Результат отображения таблицы "Характеристика экспертов"

Рис. 2. Результат отображения таблицы "Образование"

Рис.3. Результат отображения таблицы "Опыт рецензирования"

Рис.4. Результат отображения таблицы "Занятость рецензированием в день"

Рис.5. Результат отображения таблицы запроса SELECT

Рис.6. Результат отображения таблицы "Жанр-Поджанр - Текст"

Рис.7. Результат отображения таблицы "Текст - Эксперт"

Вывод: в ходе работы был создан скрипт MySQL, с помощью которого генерируются и заполняются несколько таблиц для основной: 1 основная и 5 вспомогательных. Вспомогательные таблицы подключаются через внешние ключи и задают соответствие между индексом и названиями категорий для сортировки. Это необходимо для приведения таблицы к удобочитаемой форме. В запросе на вывод информации вспомогательные таблицы подключаются с помощью INNER JOIN, что и позволяет преобразовать выводимые данные из ID в слова.

Соседние файлы в папке Мои работы