Загрузил ЭВАН

Курсовая работа по базам данных "Киберспортивный клуб"

реклама
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«Челябинский государственный университет»
(ФГБОУ ВО «ЧелГУ»)
Институт информационных технологий
Кафедра информационных технологий и экономической информатики
КУРСОВАЯ РАБОТА
по дисциплине «Базы и хранилища данных»
Тема: «Киберспортивный клуб»
Выполнил: Киров И. Д.
Группа: ПИ-201
Проверил: Барабанщиков И. В.
Курсовая работа защищена ____________________________________________________
дата
Челябинск 2024 г.
оценка
Содержание
Введение………………………………………………………………………………….3
I. Предметная область………………………………………………………………….4
1.1. Описание………………………………………………………………………….4
1.2. Бизнес-правила…………………………………………………………………...5
1.3. Группы пользователей и их права………………………………………………6
II. Инфологическое проектирование………………………………………………....7
2.1. Анализ предметной области.
Построение диаграммы в нотации Питера Чена……………………………….7
III. Даталогическое проектирование…………………………………………………9
3.1. Переход к реляционной модели………………………………………………....9
3.2. Нормализация таблицы до 3НФ………………..................................................11
3.3 Построение окончательного вида ER-диаграммы……………………………..11
IV. Реализация БД……………………………………………………………………..12
4.1. Выбор СУБД……………...……………………………………………………..12
4.2. Создание схемы…………………………………………………………………12
4.3. Скрипты создания базы данных…………………………………….………….12
4.4. Реализация бизнес-логики……………………………………………………...13
V. Реализация безопасности………………………………………………………….14
5.1. Роли, привилегии, пользователи……………………………………………….14
VI. Заключение……………………………………………………………………........17
6.1. Вывод…………………………………………………………………………….17
VII. Список литературы……………………………………………………………....18
Приложения………………………………………………………………………….…19
Приложение №1……………………………………………………………………...19
Приложение №2……………………………………………………………………...20
Приложение №3……………………………………………………………………...21
2
Введение
В современном мире, перенасыщенном информацией, эффективное хранение, обработка и
анализ данных играют ключевую роль в успехе любого предприятия или
исследовательского проекта. База данных — это организованная система для хранения и
управления информацией. Она состоит из структур для размещения данных, а также
программных компонентов, которые позволяют обрабатывать, анализировать и
манипулировать этими данными. Системы управления базами данных (СУБД)
предоставляют инструменты для выполнения различных операций с данными, таких как
выборка, сортировка и многих других. СУБД являются критически важным элементом
современных информационных систем, обеспечивая эффективное управление
информационными ресурсами и их использование в рамках организаций. Данная курсовая
работа посвящена разработке базы данных для киберспортивного клуба.
3
I.
ПРЕДМЕТНАЯ ОБЛАСТЬ
1.1.
Описание
Киберспортивный (компьютерный) клуб – место, где люди могут арендовать компьютер
для различных целей, но в основном с намерением игрового времяпрепровождения.
Среднестатистический клуб предоставляет 20 посадочных мест со своим компьютером, на
котором предустановлены лицензионный софт и игры, и девайсами. Каждый компьютер и
девайсы имеют свои характеристики. Помещение может разделяться на две основных
зоны – обычная и VIP. VIP-зона является закрытой и в ней находится в среднем 10
посадочных мест с более дорогими и мощными ПК и девайсами. Соответственно, одно
посадочное место в обычной зоне дешевле, чем в VIP. Персонал компьютерного клуба не
очень обширен, но в лучшем случае в нём должны быть: администратор-кассир,
встречающий клиентов на ресепшене и осуществляющий оплату; помощник
администратора, обслуживающий зал и клиентов; системный администратор,
обслуживающий парк техники, сетевую инфраструктуру и в целом информационную
систему клуба; охрана. Оплата и аренда места производится по определённым клубом
тарифам.
4
1.2.
Бизнес-правила
Киберспортивный клуб будет реализовывать следующие бизнес-правила:

Каждый новый клиент должен будет зарегистрироваться в системе клуба прежде,
чем пользоваться услугами

В клубе имеются различные тарифные пакеты аренды, различающиеся по
количеству предоставляемого времени, по суточному времени и уровню (VIP или
обычный)

В клубе будет вестись история посещений и аренды с указанием информации о
дате, времени, клиенте и посадочном месте, тарифном пакете

На компьютерах будут иметься заранее предустановленные игровые клиенты с
готовыми аккаунтами, на которых будут находится и добавляться лицензионные
игры

Клиентам запрещено использовать свои аккаунты и девайсы

Клиент может арендовать только одно место в текущий момент времени
5
1.3.
Группы пользователей и их права
1. Системный администратор:



Полный доступ ко всем таблицам и функциям базы данных
Возможность создавать, изменять и удалять таблицы, представления,
процедуры и триггеры
Возможность управлять пользователями и их правами доступа
2. Администратор-кассир:


Возможность создавать, изменять и удалять записи в таблицах, связанных с
историей посещений и арендой игровых мест
Доступ на чтение и запись к таблицам, связанным с информацией о
зарегистрированных клиентах
3. Администратор зала:



Возможность создавать, изменять и удалять записи в таблицах, связанных с
состоянием игровых (посадочных) мест
Доступ на чтение и запись к таблицам, связанным с информацией о
состоянии ПК и его составляющих
Ограниченный доступ на чтение истории посещений клиентов
4. Охрана:

Ограниченный доступ на чтение информации о пользователях и их истории
посещений
6
II.
ИНФОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ
2.1. Анализ предметной области.
Построение диаграммы в нотации Питера Чена
Проанализировав предметную область и её бизнес-правила, я выделил следующие
сущности, их атрибуты и связи:
1. Клиент:
 Атрибуты:
1. id
2. Имя
3. Фамилия
4. Отчество
5. Номер телефона
6. Дата рождения
 Связи:
o Клиент арендует посадочное место (один-ко-одному)
2. Посадочное место:
 Атрибуты:
1. Id
2. Номер
3. Модель кресла
4. Модель монитора
5. Модель мыши
6. Модель клавиатуры
7. Модель наушников
8. Модель коврика
 Связи:
 Посадочное место имеет ПК (один-ко-одному)
 Посадочное место реализует тариф (многие-ко-многим)
3. Зал:
 Атрибуты:
1. Id
2. Номер
3. Тип
 Связи:
o Зал имеет посадочное место
4. Сотрудник:
 Атрибуты:
1. Id
2. Имя
3. Фамилия
4. Отчество
5. Должность
6. Номер телефона
7. Дата рождения
7

Связи:
o Сотрудник работает в зале
5. ПК:

Атрибуты:
1. Id
2. Номер
3. Модель видеокарты
4. Модель процессора
 Связи:
o ПК имеет аккаунты (один-ко-многим)
6. Аккаунт:
 Атрибуты:
1. Id
2. Логин
3. Пароль
4. Игровой клиент
 Связи:
o Аккаунты имеют игры (многие-ко-многим)
7. Игра:
 Атрибуты:
1. Id
2. Название
3. Жанр
Для дополнительной информации обратимся к приложению 1.
8
III.
ДАТАЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ
3.1.
Переход к реляционной модели
1. Клиенты (Clients)
| Колонка | Тип данных | Ограничения |
| ID (PK) | INT | IDENTITY, NOT NULL |
| PhoneNumber | VARCHAR(20) | NOT NULL, UNIQUE |
| FirstName | VARCHAR(50) | NOT NULL |
| LastName | VARCHAR(50) | NOT NULL |
| Patronymic | VARCHAR(50) | |
| BirthDate | DATE | NOT NULL |
2. Посадочные места (Workplaces)
| Колонка | Тип данных | Ограничения |
| ID (PK) | INT | IDENTITY, NOT NULL |
| HallID (FK) | INT | NOT NULL |
| PCID (FK) | INT | NOT NULL |
| Number | INT | NOT NULL, UNIQUE |
| ChairModel | VARCHAR(50) | |
| MonitorModel | VARCHAR(50) | |
| MouseModel | VARCHAR(50) | |
| KeyboardModel | VARCHAR(50) | |
| HeadphonesModel | VARCHAR(50) | |
| MatModel | VARCHAR(50) | |
3. Залы (Halls)
| Колонка | Тип данных | Ограничения |
| ID (PK) | INT | IDENTITY, NOT NULL |
| Number | INT | NOT NULL, UNIQUE |
| Type | VARCHAR(50) | NOT NULL |
4. Сотрудники (Employees)
| Колонка | Тип данных | Ограничения |
| ID (PK) | INT | IDENTITY, NOT NULL |
| PhoneNumber | VARCHAR(20) | NOT NULL, UNIQUE |
| FirstName | VARCHAR(50) | NOT NULL |
| LastName | VARCHAR(50) | NOT NULL |
| Patronymic | VARCHAR(50) | |
| BirthDate | DATE | NOT NULL |
| Position | VARCHAR(50) | NOT NULL |
5. ПК (PCs)
| Колонка | Тип данных | Ограничения |
| ID (PK) | INT | IDENTITY, NOT NULL |
| Number | INT | NOT NULL, UNIQUE |
9
| GPUModel | VARCHAR(50) | NOT NULL |
| CPUModel | VARCHAR(50) | NOT NULL |
6. Тарифы (Tariffs)
| Колонка | Тип данных | Ограничения |
| ID (PK) | INT | IDENTITY, NOT NULL |
| Name | VARCHAR(50) | NOT NULL, UNIQUE |
| Cost | MONEY | NOT NULL |
| NumberOfHours | INT| NOT NULL |
| ForAdult | BOOLEAN | NOT NULL |
7. Аккаунты (Accounts)
| Колонка | Тип данных | Ограничения
| ID (PK) | INT | IDENTITY, NOT NULL |
| Login | VARCHAR(50) | NOT NULL, UNIQUE |
| PasswordHash | VARCHAR(255) | NOT NULL |
| GameClient | VARCHAR(50) | | | PCID (FK) | INT | NOT NULL |
8. Игры (Games)
| Колонка | Тип данных | Ограничения
| ID (PK) | INT | IDENTITY, NOT NULL |
| Name | VARCHAR(100) | NOT NULL, UNIQUE |
| Genre | VARCHAR(50) | NOT NULL |
Связывающие таблицы:
9. Клиенты - Посадочные места (ClientsWorkplaces)
| Колонка | Тип данных | Ограничения |
| ClientID (PK, FK) | INT | NOT NULL |
| WorkplaceID (PK, FK) | INT | NOT NULL |
| TarrifID (FK) | INT | NOT NULL |
| Time | Time | NOT NULL |
| Date | Date | NOT NULL |
10. Посадочные места - Тарифы (WorkplacesTariffs)
| Колонка | Тип данных | Ограничения |
| WorkplaceID (PK, FK) | INT | NOT NULL |
| TariffID (PK, FK) | INT | NOT NULL |
11. Сотрудники - Залы (EmployeesHalls)
| Колонка | Тип данных | Ограничения |
| EmployeeID (PK, FK) | INT | NOT NULL |
| HallID (PK, FK) | INT | NOT NULL |
12. Аккаунты - Игры (AccountsGames)
| Колонка | Тип данных | Ограничения |
| AccountID (PK, FK) | INT | NOT NULL |
| GameID (PK, FK) | INT | NOT NULL |
10
Ограничения целостности:
* PK - Первичный ключ
* FK - Внешний ключ
* IDENTITY - Автоинкремент
* NOT NULL - Не может быть пустым
* UNIQUE - Уникальное значение
11
3.2.
Нормализация таблиц до 3НФ
Нормализация:
* 1НФ: Все атрибуты атомарны (неделимы).
* 2НФ: выполняется 1НФ, и все неключевые атрибуты зависят от всего первичного ключа
(нет частичной зависимости).
* 3НФ: выполняется 2НФ, и нет транзитивных зависимостей (неключевые атрибуты не
зависят друг от друга). Даталогическая модель соответствует требованиям 1НФ, 2НФ и
3НФ.
Связи, не поддерживаемые реляционной моделью:
Реляционная модель не поддерживает связи "один-ко-одному" в чистом виде. В данной
модели такие связи реализованы с помощью внешних ключей:
* Клиент - Посадочное место (один-ко-одному) - реализовано через таблицу
ClientsWorkplaces
* Посадочное место - ПК (один-ко-одному) - реализовано через внешний ключ PCID в
таблице Workplaces
3.3.
Построение окончательного вида ER-диаграммы
Для построения окончательного вида ER-диаграммы был использован инструмент
Draw.IO. Чтобы с ней ознакомиться, обратимся к приложению 2.
12
РЕАЛИЗАЦИЯ БД
IV.
Выбор СУБД
4.1.
В рамках курсовой работы была выбрана мощная и надежная PostgreSQL, как основная
система управления базами данных. Для удобного управления базами данных PostgreSQL
был использован графический инструмент pgAdmin 4. pgAdmin 4 предоставляет удобный
интерфейс для администрирования PostgreSQL, позволяя выполнять различные задачи,
такие как создание и изменение таблиц, написание и выполнение SQL-запросов,
мониторинг баз данных и многое другое.
4.2.
Создания схемы
В рамках курсовой работы для создания и управления схемой базы данных использовался
привилегированный пользователь "system_administrator". Этому пользователю
предоставлен полный доступ ко всем таблицам и командам в СУБД, включая права на
создание, модификацию и удаление объектов базы данных. Однако, для обеспечения
безопасности данных рекомендуется создавать отдельных пользователей с минимально
необходимыми привилегиями и проявлять осторожность при выполнении операций.
Регулярное резервное копирование базы данных также является важной мерой
предосторожности. Пользователь "system_administrator" должен использоваться
исключительно для административных задач, и доступ к нему должен быть предоставлен
только компетентным специалистам.
4.3.
Скрипты создания базы данных
Все скрипты по созданию таблиц, ролей, функций/процедур находятся в приложении 3.
13
4.4.
Реализация бизнес-логики
Процедура №1. register_client(id integer, first_name character varying(50), patronymic
character varying(50), last_name character varying(50), birth_date date, phone_number
character varying(20))
Данная процедура предназначена для администратора-кассира, чтобы регистрировать
новых клиентов, при этом происходит проверка уникальности номера телефона, и создать
второго пользователя с одним и тем же номером не выйдет.
Процедура №2. add_new_pc (id integer, number integer, gpu_model character varying(50),
cpu_model character varying(50))
Данная процедура позволяет администратору зала добавлять новые ПК.
Функция №1. get_client_info(phone_number character varying(20))
Данная функция предназначена для администратора-кассира и возвращает из базы данных
информацию о зарегистрированном клиенте по номеру телефона.
Представление №1. сlients_rentals
Данное представление предназначено для охранника и администратора-кассира, которое
возвращает из базы данных информацию о истории посещения клиентов.
На самом деле можно реализовать огромное множество различных процедур/функций. Но
на данный момент реализованы самые необходимые.
14
V.
РЕАЛИЗАЦИЯ БЕЗОПАСНОСТИ
5.1.
Роли, привилегии, пользователи
База данных имеет следующих пользователей:
1. Администратор-кассир
2. Администратор зала
3. Системный администратор
4. Охрана
Соответственно реализуются следующие роли с привилегиями:
1. Роль “system_administrator”: имеет привилегии суперпользователя, отвечает за всю
базу данных (делегирование процедур/функций, все CRUD операции):
CREATE ROLE system_administrator WITH
LOGIN
SUPERUSER
INHERIT
CREATEDB
CREATEROLE
NOREPLICATION
BYPASSRLS
2. Роль “administrator-cashier”: обычный пользователь, имеющий ограниченный
доступ доступ на чтение и добавление данных в таблицах, связанных с клиентами,
посещениями и т. п, а также может выполнять процедуру register_client и функцию
get_client_info:
CREATE ROLE administrator_cashier WITH
LOGIN
15
NOSUPERUSER
INHERIT
NOCREATEDB
NOCREATEROLE
NOREPLICATION
NOBYPASSRLS
3. Роль “hall_administrator”: обычный пользователь имеющий ограниченный доступ
на чтение и добавление данных в таблицах, связанных с залами, компами, играми и
аккаунтами, может выполнять процедуру add_new_pc:
CREATE ROLE hall_administrator WITH
LOGIN
NOSUPERUSER
INHERIT
NOCREATEDB
NOCREATEROLE
NOREPLICATION
NOBYPASSRLS;
4. Роль “security”: самый ограниченный в плане привилегий пользователь. Имеет
доступ на просмотр представления clients_rentals:
CREATE ROLE security WITH
LOGIN
NOSUPERUSER
INHERIT
NOCREATEDB
NOCREATEROLE
NOREPLICATION
16
NOBYPASSRLS;
Подробнее о правах доступа можно посмотреть в приложении 3 в скриптах
создания таблиц.
17
VI.
ЗАКЛЮЧЕНИЕ
Вывод
6.1.
В рамках данной курсовой работы разработана база данных для киберспортивного клуба.
Процесс разработки включал в себя следующие этапы:
1. Анализ предметной области: Выявлены информационные потребности
киберспортивного клуба и определены ключевые сущности и их атрибуты.
2. Проектирование структуры базы данных: на основе анализа предметной области
разработана даталогическая модель базы данных, включающая в себя таблицы для
хранения информации о клиентах, компьютерах, посадочных местах и сотрудниках.
Установлены связи между таблицами для обеспечения целостности и эффективности
хранения данных.
3. Реализация базы данных: в качестве системы управления базами данных (СУБД)
выбрана PostgreSQL. Созданы таблицы базы данных в соответствии с разработанной
даталогической моделью и заполнены тестовыми данными.
4. Разработка процедур: для автоматизации операций и обеспечения целостности данных
разработан набор хранимых процедур, упрощающих выполнение типовых задач и
гарантирующих корректность данных.
5. Обеспечение безопасности: для разграничения доступа к данным определены роли
пользователей с соответствующими привилегиями. Это позволяет обеспечить
безопасность данных и контролировать доступ к конфиденциальной информации. В
результате создана база данных, обладающая базовым функционалом для управления
информацией киберспортивного клуба.
Разработанное решение обеспечивает надежное хранение данных и предоставляет
инструменты для эффективного выполнения операций в рамках заданной предметной
области.
18
VII.
СПИСОК ЛИТЕРАТУРЫ
1. Нормализация таблиц.
https://chelyabinsk.1cbit.ru/blog/chto-takoe-normalizatsiya
2. PostgreSQL: Documentation: 15: 43.2. Структура PL/SQL.
https://repo.postgrespro.ru/doc//pgsql/15.6
3. PostgreSQL: Documentation: 15: Create role
https://www.postgresql.org/docs/15/sql-createrole
19
ПРИЛОЖЕНИЯ
Приложение №1. Диаграмма в нотации Питера Чена
20
Приложение №2. Реляционная ER-диаграмма
21
Приложение №3. Скрипты базы данных
Сама база данных:
CREATE DATABASE cyber_club
WITH
OWNER = system_administrator
ENCODING = 'UTF8'
LC_COLLATE = 'Russian_Russia.1251'
LC_CTYPE = 'Russian_Russia.1251'
LOCALE_PROVIDER = 'libc'
TABLESPACE = pg_default
CONNECTION LIMIT = -1
IS_TEMPLATE = False;
22
Процедура register_client:
CREATE OR REPLACE PROCEDURE public.register_client(
IN id integer,
IN first_name character varying,
IN patronymic character varying,
IN last_name character varying,
IN birth_date date,
IN phone_number character varying)
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
IF EXISTS (SELECT 1 FROM clients WHERE clients.phone_number =
register_client.phone_number) THEN
RAISE EXCEPTION 'Клиент с таким номером телефона уже существует.';
END IF;
INSERT INTO clients (id, first_name, patronymic, last_name, birth_date, phone_number)
VALUES (register_client.id, register_client.first_name, register_client.patronymic,
register_client.last_name, register_client.birth_date, register_client.phone_number);
END;
$BODY$;
ALTER PROCEDURE public.register_client(integer, character varying, character varying,
character varying, date, character varying)
OWNER TO system_administrator;
23
Процедура add_new_pc:
CREATE OR REPLACE PROCEDURE public.add_new_pc(
IN id integer,
IN number integer,
IN gpu_model character varying,
IN cpu_model character varying)
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
INSERT INTO PCs (pcs.id, pcs.number, pcs.gpu_model, cpu_model)
VALUES (add_new_pc.id, add_new_pc.number, add_new_pc.gpu_model,
add_new_pc.cpu_model);
END;
$BODY$;
ALTER PROCEDURE public.add_new_pc(integer, integer, character varying, character
varying)
OWNER TO evan;
GRANT EXECUTE ON PROCEDURE public.add_new_pc(integer, integer, character varying,
character varying) TO PUBLIC;
GRANT EXECUTE ON PROCEDURE public.add_new_pc(integer, integer, character varying,
character varying) TO hall_administrator;
GRANT EXECUTE ON PROCEDURE public.add_new_pc(integer, integer, character varying,
character varying) TO system_administrator WITH GRANT OPTION;
24
Функция get_client_info:
CREATE OR REPLACE FUNCTION public.get_client_info(
client_id integer)
RETURNS TABLE(id integer, first_name character varying, patronymic character
varying, last_name character varying, birth_date date, phone_number character varying)
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
ROWS 1000
AS $BODY$
BEGIN
RETURN QUERY SELECT * FROM clients WHERE clients.id =
get_client_info.client_id;
END;
$BODY$;
ALTER FUNCTION public.get_client_info(integer)
OWNER TO system_administrator;
GRANT EXECUTE ON FUNCTION public.get_client_info(integer) TO PUBLIC;
GRANT EXECUTE ON FUNCTION public.get_client_info(integer) TO
administrator_cashier;
GRANT EXECUTE ON FUNCTION public.get_client_info(integer) TO
system_administrator WITH GRANT OPTION;
25
Представление clients_rents:
CREATE OR REPLACE VIEW public.clients_rentals
AS
SELECT c.first_name,
c.last_name,
c.patronymic,
c.phone_number,
cw.date AS rentaldate,
cw."time" AS rentaltime
FROM clients c
JOIN clients_workplaces cw ON c.id = cw.client_id;
ALTER TABLE public.clients_rentals
OWNER TO system_administrator;
26
Таблица accounts:
CREATE TABLE IF NOT EXISTS public.accounts
(
id integer NOT NULL,
login character varying(50) COLLATE pg_catalog."default" NOT NULL,
password_hash character varying(50) COLLATE pg_catalog."default" NOT NULL,
game_client character varying(50) COLLATE pg_catalog."default" NOT NULL,
pc_id integer NOT NULL,
CONSTRAINT accounts_pkey PRIMARY KEY (id),
CONSTRAINT accounts_login_game_client_key UNIQUE (login)
INCLUDE(game_client),
CONSTRAINT accounts_pc_id_fkey FOREIGN KEY (pc_id)
REFERENCES public.pcs (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.accounts
OWNER to system_administrator;
GRANT ALL ON TABLE public.accounts TO system_administrator WITH GRANT
OPTION;
27
Таблица accounts_games:
CREATE TABLE IF NOT EXISTS public.accounts_games
(
account_id integer NOT NULL,
game_id integer NOT NULL,
CONSTRAINT accounts_games_pkey PRIMARY KEY (account_id, game_id),
CONSTRAINT accounts_games_game_id_fkey FOREIGN KEY (game_id)
REFERENCES public.games (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.accounts_games
OWNER to system_administrator;
REVOKE ALL ON TABLE public.accounts_games FROM administrator_cashier;
REVOKE ALL ON TABLE public.accounts_games FROM hall_administrator;
GRANT SELECT ON TABLE public.accounts_games TO administrator_cashier;
GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE public.accounts_games TO
hall_administrator;
GRANT ALL ON TABLE public.accounts_games TO system_administrator WITH GRANT
OPTION;
Таблица clients:
CREATE TABLE IF NOT EXISTS public.clients
(
28
id integer NOT NULL,
first_name character varying(50) COLLATE pg_catalog."default" NOT NULL,
patronymic character varying(50) COLLATE pg_catalog."default",
last_name character varying(50) COLLATE pg_catalog."default" NOT NULL,
birth_date date NOT NULL,
phone_number character varying(20) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT clients_pkey PRIMARY KEY (id),
CONSTRAINT clients_phone_number_key UNIQUE (phone_number)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.clients
OWNER to system_administrator;
REVOKE ALL ON TABLE public.clients FROM administrator_cashier;
REVOKE ALL ON TABLE public.clients FROM security;
GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE public.clients TO
administrator_cashier;
GRANT SELECT ON TABLE public.clients TO security;
GRANT ALL ON TABLE public.clients TO system_administrator WITH GRANT
OPTION;
Таблица clients_workplaces:
CREATE TABLE IF NOT EXISTS public.clients_workplaces
(
29
workplace_id integer NOT NULL,
client_id integer NOT NULL,
tariff_id integer NOT NULL,
"time" time without time zone NOT NULL,
date date NOT NULL,
CONSTRAINT clients_workplaces_pkey PRIMARY KEY (workplace_id, client_id),
CONSTRAINT clients_workplaces_client_id_fkey FOREIGN KEY (client_id)
REFERENCES public.clients (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT clients_workplaces_tarrif_id_fkey FOREIGN KEY (tariff_id)
REFERENCES public.workplaces_tariffs (tariff_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.clients_workplaces
OWNER to system_administrator;
REVOKE ALL ON TABLE public.clients_workplaces FROM administrator_cashier;
REVOKE ALL ON TABLE public.clients_workplaces FROM hall_administrator;
REVOKE ALL ON TABLE public.clients_workplaces FROM security;
GRANT INSERT, SELECT ON TABLE public.clients_workplaces TO
administrator_cashier;
GRANT SELECT ON TABLE public.clients_workplaces TO hall_administrator;
30
GRANT SELECT ON TABLE public.clients_workplaces TO security;
GRANT ALL ON TABLE public.clients_workplaces TO system_administrator WITH
GRANT OPTION;
Таблица employees:
CREATE TABLE IF NOT EXISTS public.employees
31
(
id integer NOT NULL,
first_name character varying(50) COLLATE pg_catalog."default" NOT NULL,
patronymic character varying(50) COLLATE pg_catalog."default",
last_name character varying(50) COLLATE pg_catalog."default" NOT NULL,
"position" character varying(50) COLLATE pg_catalog."default" NOT NULL,
phone_number character varying(20) COLLATE pg_catalog."default" NOT NULL,
birth_date date NOT NULL,
CONSTRAINT employees_pkey PRIMARY KEY (id),
CONSTRAINT employees_phone_number_key UNIQUE (phone_number)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.employees
OWNER to system_administrator;
GRANT ALL ON TABLE public.employees TO system_administrator WITH GRANT
OPTION;
Таблица employees_halls:
32
CREATE TABLE IF NOT EXISTS public.employees_halls
(
hall_id integer NOT NULL,
employee_id integer NOT NULL,
CONSTRAINT employees_halls_pkey PRIMARY KEY (hall_id, employee_id),
CONSTRAINT employees_halls_hall_id_fkey FOREIGN KEY (hall_id)
REFERENCES public.halls (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.employees_halls
OWNER to system_administrator;
GRANT ALL ON TABLE public.employees_halls TO system_administrator WITH GRANT
OPTION;
33
Таблица games:
CREATE TABLE IF NOT EXISTS public.games
(
id integer NOT NULL,
title character varying(100) COLLATE pg_catalog."default" NOT NULL,
genre character varying(50) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT games_pkey PRIMARY KEY (id),
CONSTRAINT games_title_key UNIQUE (title)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.games
OWNER to system_administrator;
REVOKE ALL ON TABLE public.games FROM administrator_cashier;
REVOKE ALL ON TABLE public.games FROM hall_administrator;
GRANT SELECT ON TABLE public.games TO administrator_cashier;
GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE public.games TO
hall_administrator;
GRANT ALL ON TABLE public.games TO system_administrator WITH GRANT
OPTION;
34
Таблица halls:
CREATE TABLE IF NOT EXISTS public.halls
(
id integer NOT NULL,
"number" integer NOT NULL,
type character varying(50) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT "Halls_pkey" PRIMARY KEY (id),
CONSTRAINT "Halls_number_key" UNIQUE ("number")
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.halls
OWNER to system_administrator;
REVOKE ALL ON TABLE public.halls FROM administrator_cashier;
REVOKE ALL ON TABLE public.halls FROM hall_administrator;
GRANT SELECT ON TABLE public.halls TO administrator_cashier;
GRANT SELECT, UPDATE ON TABLE public.halls TO hall_administrator;
GRANT ALL ON TABLE public.halls TO system_administrator WITH GRANT OPTION;
35
Таблица pcs:
CREATE TABLE IF NOT EXISTS public.pcs
(
id integer NOT NULL,
"number" integer NOT NULL,
gpu_model character varying(50) COLLATE pg_catalog."default" NOT NULL,
cpu_model character varying(50) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT pcs_pkey PRIMARY KEY (id),
CONSTRAINT pcs_number_key UNIQUE ("number")
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.pcs
OWNER to system_administrator;
REVOKE ALL ON TABLE public.pcs FROM administrator_cashier;
REVOKE ALL ON TABLE public.pcs FROM hall_administrator;
GRANT SELECT ON TABLE public.pcs TO administrator_cashier;
GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE public.pcs TO
hall_administrator;
GRANT ALL ON TABLE public.pcs TO system_administrator WITH GRANT OPTION;
36
Таблица tariffs:
CREATE TABLE IF NOT EXISTS public.tariffs
(
id integer NOT NULL,
name character varying(50) COLLATE pg_catalog."default" NOT NULL,
cost money NOT NULL,
number_of_hours integer NOT NULL,
for_adult boolean NOT NULL,
CONSTRAINT tarrifs_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.tariffs
OWNER to system_administrator;
REVOKE ALL ON TABLE public.tariffs FROM hall_administrator;
GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE public.tariffs TO
hall_administrator;
GRANT ALL ON TABLE public.tariffs TO system_administrator WITH GRANT OPTION;
Таблица workplaces:
CREATE TABLE IF NOT EXISTS public.workplaces
(
id integer NOT NULL,
pc_id integer NOT NULL,
37
"number" integer NOT NULL,
chair_model character varying(50) COLLATE pg_catalog."default" NOT NULL,
monitor_model character varying(50) COLLATE pg_catalog."default" NOT NULL,
mouse_model character varying(50) COLLATE pg_catalog."default" NOT NULL,
keyboard_model character varying(50) COLLATE pg_catalog."default" NOT NULL,
headphones_model character varying(50) COLLATE pg_catalog."default" NOT NULL,
mat_model character varying(50) COLLATE pg_catalog."default" NOT NULL,
hall_id integer NOT NULL,
CONSTRAINT workplaces_pkey PRIMARY KEY (id),
CONSTRAINT workplaces_number_key UNIQUE ("number"),
CONSTRAINT workplaces_hall_id_fkey FOREIGN KEY (hall_id)
REFERENCES public.halls (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID,
CONSTRAINT workplaces_pc_id_fkey FOREIGN KEY (pc_id)
REFERENCES public.pcs (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.workplaces
OWNER to system_administrator;
REVOKE ALL ON TABLE public.workplaces FROM administrator_cashier;
REVOKE ALL ON TABLE public.workplaces FROM hall_administrator;
38
GRANT SELECT ON TABLE public.workplaces TO administrator_cashier;
GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE public.workplaces TO
hall_administrator;
GRANT ALL ON TABLE public.workplaces TO system_administrator WITH GRANT
OPTION;
Таблица workplaces_tariffs:
CREATE TABLE IF NOT EXISTS public.workplaces_tariffs
(
workplace_id integer NOT NULL,
tariff_id integer NOT NULL,
39
CONSTRAINT workplaces_tarrifs_pkey PRIMARY KEY (workplace_id, tariff_id),
CONSTRAINT workplaces_tarrifs_tarrif_id_workplace_id_key UNIQUE (tariff_id)
INCLUDE(workplace_id),
CONSTRAINT workplaces_tarrifs_tarrif_id_fkey FOREIGN KEY (tariff_id)
REFERENCES public.tariffs (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.workplaces_tariffs
OWNER to system_administrator;
REVOKE ALL ON TABLE public.workplaces_tariffs FROM administrator_cashier;
REVOKE ALL ON TABLE public.workplaces_tariffs FROM hall_administrator;
GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE public.workplaces_tariffs TO
administrator_cashier;
GRANT SELECT ON TABLE public.workplaces_tariffs TO hall_administrator;
GRANT ALL ON TABLE public.workplaces_tariffs TO system_administrator WITH
GRANT OPTION;
40
Скачать