Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LR4.Tyutterin_Yakov_Z1411

.pdf
Скачиваний:
0
Добавлен:
29.04.2024
Размер:
8.32 Mб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КАФЕДРА ПРИКЛАДНОЙ ИНФОРМАТИКИ

ОЦЕНКА

ПРЕПОДАВАТЕЛЬ

канд. техн. наук, доц.

 

Е. Л. Турнецкая

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4

Физическая реализация реляционной базы данных на сервере MySql

по дисциплине: Базы данных

РАБОТУ ВЫПОЛНИЛ

 

 

 

 

 

СТУДЕНТ гр. №

Z1411

 

 

Я. Н. Тюттерин

 

 

 

 

 

 

 

номер группы

подпись, дата

 

инициалы, фамилия

Студенческий билет №

2022/4886

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Лабораторная работа № 4. ФИЗИЧЕСКАЯ РЕАЛИЗАЦИЯ РЕЛЯЦИОННОЙ БАЗЫ ДАННЫХ НА СЕРВЕРЕ MYSQL

Цели работы: Физическая реализация реляционной БД на сервере MySql.

Вариант 18. Занятость актеров театра. Работников театра можно подразделить на актеров, музыкантов, постановщиков и служащих. Каждая из перечисленных категорий имеет уникальные атрибуты-характеристики и может подразделяться (например, постановщики) на более мелкие категории. Театр возглавляет директор, в функции которого входят контроль за постановками спектаклей, утверждение pепеpтуаpа, принятие на работу новых служащих, приглашение актеров и постановщиков. Актеры, музыканты и постановщики, работающие в театре, могут уезжать на гастроли. Актеры театра могут иметь звания заслуженных и народных артистов, могут быть лауреатами конкурсов. Также актерами театра могут быть и студенты театральных училищ. Каждый актер имеет свои вокальные и внешние данные (пол, возраст, голос, pост и т.п.), которые могут подходить для каких-то pолей, а для каких-то нет (не всегда женщина может сыграть мужчину и наоборот). Для постановки любого спектакля необходимо подобрать актеров на роли и дублеров на каждую главную pоль. Естественно, что один и тот же актер не может играть более одной pоли в спектакле, но может играть несколько pолей в различных спектаклях. У спектакля также имеется pежисеp-постановщик, художник-постановщик, диpижеp- постановщик, автор. Спектакли можно подразделить по жанрам: музыкальная комедия, трагедия, оперетта и пр. С другой стороны, спектакли можно подразделить на детские, молодежные и пр. В pепеpтуаpе театра указывается какие спектакли, в какие дни и в какое время будут проходить, а также даты пpемьеp. В кассах театра можно заранее приобрести билеты или абонемент на любые спектакли. Абонемент обычно включает в себя билеты на спектакли либо конкретного автора, либо конкретного жанра. Цена билетов зависит от места, и спектакля. На премьеры билеты дороже. Администрацией театра фиксируется количество проданных билетов на каждый спектакль.

Выполнил скрипт для создания структуры таблиц БД:

Скрипт:

CREATE TABLE IF NOT EXISTS genres (

id integer primary key auto_increment not null, name varchar(15) not null unique

);

CREATE TABLE IF NOT EXISTS categories (

id integer primary key auto_increment not null, name varchar(15) not null unique

);

CREATE TABLE IF NOT EXISTS positions (

id integer primary key auto_increment not null, name varchar(15) not null UNIQUE

);

CREATE TABLE IF NOT EXISTS achievements (

id integer primary key auto_increment not null, name varchar(30) not null UNIQUE

);

CREATE TABLE IF NOT EXISTS workers (

id integer primary key auto_increment not null, first_name varchar(30) not null,

last_name varchar(30) not null, patronymic varchar(30),

gender char(1) not null, salary DECIMAL(10,2) not null, date_of_birth date not null, voice integer,

height integer,

CONSTRAINT CHECK_GENDER CHECK (gender in('M','F','T'))

);

CREATE TABLE IF NOT EXISTS theaters (

id integer primary key auto_increment not null, title varchar(30) not null,

director_id integer not null,

FOREIGN KEY (director_id) REFERENCES workers (id)

);

CREATE TABLE IF NOT EXISTS shows (

id integer primary key auto_increment not null, title varchar(20) not null,

date timestamp not null, duration integer not null, theatre_id integer not null,

FOREIGN KEY (theatre_id) REFERENCES theaters (id)

);

CREATE TABLE IF NOT EXISTS roles (

id integer primary key auto_increment not null, name varchar(30) not null UNIQUE

);

CREATE TABLE IF NOT EXISTS subscriptions (

id integer primary key auto_increment not null, price DECIMAL(10,2) not null

);

CREATE TABLE IF NOT EXISTS tickets (

id integer primary key auto_increment not null, show_id integer not null,

available bool default true not null, subscription_id integer,

FOREIGN KEY (subscription_id) REFERENCES subscriptions (id),

FOREIGN KEY (show_id) REFERENCES shows (id)

);

CREATE TABLE IF NOT EXISTS genre_show ( show_id integer not null, genre_id integer not null,

CONSTRAINT PK_GENRE_SHOW PRIMARY KEY genre_show (show_id, genre_id),

FOREIGN KEY (show_id) REFERENCES shows (id), FOREIGN KEY (genre_id) REFERENCES genres (id)

);

CREATE TABLE IF NOT EXISTS achievement_worker ( achievement_id integer not null, worker_id integer not null,

CONSTRAINT PK_WORKER_ACHIVEMENT PRIMARY KEY achievement_worker (achievement_id, worker_id),

FOREIGN KEY (achievement_id) REFERENCES achievements (id), FOREIGN KEY (worker_id) REFERENCES workers (id)

);

CREATE TABLE IF NOT EXISTS position_worker ( position_id integer not null, worker_id integer not null,

theater_id integer not null,

CONSTRAINT PK_WORKER_POSITION PRIMARY KEY position_worker (position_id, worker_id, theater_id),

FOREIGN KEY (position_id) REFERENCES positions (id), FOREIGN KEY (worker_id) REFERENCES workers (id), FOREIGN KEY (theater_id) REFERENCES theaters (id)

);

CREATE TABLE IF NOT EXISTS category_show ( category_id integer not null, show_id integer not null,

CONSTRAINT PK_GENRE_SHOW PRIMARY KEY category_show (category_id, show_id),

FOREIGN KEY (category_id) REFERENCES categories (id),

FOREIGN KEY (show_id) REFERENCES shows (id)

);

CREATE TABLE IF NOT EXISTS role_show_worker ( show_id integer not null,

role_id integer not null, worker_id integer not null,

CONSTRAINT PK_ROLE_SHOW_WORKER PRIMARY KEY role_show_worker (show_id, worker_id, role_id),

FOREIGN KEY (show_id) REFERENCES shows (id), FOREIGN KEY (role_id) REFERENCES roles (id),

FOREIGN KEY (worker_id) REFERENCES workers (id)

);

База данных успешно заполнена таблицами и созданы соответствующие индексы:

Начнем с заполнения таблицы работников.

Для начала создадим тех, для которых заполним лишь обязательные поля. То есть тех работников, которым не требуется указывать различные данные по типу роста и вокальных данных:

INSERT INTO workers(first_name, last_name, patronymic, gender, salary, date_of_birth)

VALUES ('Kotov', 'Maksim', 'Igorevich', 'M', 100000, '1980-12-12'), ('Makarova', 'Anastasia', 'Maksimovna', 'F', 80000, '1989-08-10'), ('Zlatov', 'Igor', 'Vadimovich', 'M', 70000, '1980-10-11'), ('Mikhailov', 'Oleg', 'Aleksandrovich', 'M', 65000, '1995-09-14'), ('Kotova', 'Violetta', 'Vitalievna', 'F', 150000, '1975-06-15'), ('Zotov', 'Mikhail', 'Urievich', 'M', 110000, ‘1978-01-20');

Таблица работников заполнена и теми, у кого указаны необязательные значения

INSERT INTO workers(first_name, last_name, patronymic, gender, salary, date_of_birth, voice, height)

VALUES ('Ivanov', 'Ivan', 'Maksimovich', 'M', 90000, '1999-11-11', 7, 178), ('Stepanova', 'Alisa', 'Igorevna', 'F', 75000, '1981-01-12', 5, 169), ('Zakharov', 'Zahar', 'Olegovich', 'M', 77000, '1985-10-20', 10, 185), ('Kuzmin', 'Danil', 'Viktorovich', 'M', 55000, '1993-02-11', 6, 170), ('Andreeva', 'Tatyana', 'Vladilenovna', 'F', 90000, '1978-02-13', 2, 174), ('Koshelev', 'Pavel', 'Aleksandovich', 'M', 93000, '1969-08-21', 1, 181);

Далее приступаем к созданию театра и назначения директора. Но предварительно выполнил SELECT-запрос к таблице работников, чтобы просмотреть данные, которые в ней теперь содержатся:

В качестве внешнего ключа будет выступать 5, это запись, на которую мы будем ссылаться из таблицы theaters.

Театр успешной создан:

INSERT INTO theaters(title, director_id) VALUES ('The best theater or nothing', 5);

Выполнив SELECT-запрос к этой таблице - получим:

Также можем сразу заполнить таблицу жанров для спектаклей.

INSERT INTO genres(name) VALUES ('Drama'),

('Comedy'), ('Triller'), ('Horrors'), ('Fighter'), (‘Melodrama');

Результат выполнения SELECT-запроса для получения записей из таблицы Genres

Также сразу можно заполнить таблицу категорий спектаклей. За основу возьмем возрастные категории(MPA):

Результат выполнения SELECT-запроса:

Заполним таблицу positions(позиции работников) учитывая то, что названия позиций уникальны.

Результат выполнения SELECT-запроса:

После этого можем связать работников с их позициями, занимаемыми в конкретном театре.

INSERT INTO position_worker(position_id, worker_id, theater_id) VALUES (9, 7, 1),

(9, 8, 1), (9, 9, 1), (9, 10, 1), (9, 11, 1), (9, 12, 1), (13, 8, 1), (15, 9, 1), (10, 5, 1), (11, 1, 1), (16, 2, 1), (14, 3, 1), (12, 4, 1), (15, 6, 1);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]