Кейс Чемпионат
Кейс-чемпионат – это соревнование, во время которого участники, студенты и выпускники вузов, в командах решают бизнес-задачи. Эти задачи составляют партнеры чемпионата – крупные компании. Участникам разрешено обращаться за помощью к экспертам и тренерам. Представители компаний (члены жюри) оценивают результаты решения кейсов.
Традиционно кейс чемпионаты подразумевают поэтапную проработку командой отдельных частей одного проекта. Создаваемая база данных направлена на хранение промежуточных и итоговых данных “турнирной таблицы”, а также информации о судейской коллегии и наставниках команд.
Чемпионат проводиться только если набралась хотя бы одна судейская бригада, зарегистрировалась хотя бы одна команда, а также были найдены помещения для проведения данного чемпионата.
Чтобы участник мог принять участие в чемпионате, то ему необходимо зарегистрироваться, указав информацию о себе (имя, фамилию, дату рождения и хотя бы один действующий e-mail адрес).
Участником может стать любой человек не достигший 27 лет. Он не может быть при этом судьёй или тренером.
Тренером может стать любой человек достигший возраста 21 год. Также в его портфолио должна быть хотя бы одна научная публикация.
Команды участников состоят из 2-5 участников, среди которых один капитан команды. Также у команды могут быть тренера (не больше 2).
Проект состоит из кейсов (не меньше одного), каждый кейс оценивается отдельно и имеет свою сложность, что влияет на итоговый результат. Максимальная оценка за один Кейс не превосходит 10 баллов.
Выигрывает команда, набравшая максимальную сумму баллов за все свои Кейсы.
Оценивание проектов происходит судейскими бригадами, состоящим из 3 судьей. Менторы не могут являться судьями.
Всё происходит на разных площадках в соответствии с расписанием.
Таким образом совокупность всех таблиц направлена на помощь в выявлении победителей и призеров.
Case:
case_id
(id кейса);description
(описание задания кейса);complexity
(сложность кейса).
Championship:
championship_id
(id чемпионата);name
(название чемпионата);description
(описание чемпионата);begin_date
(дата начала чемпионата);end_date
(дата конца чемпионата).
Email:
email
(почтовый адрес);person_id
(id человека из таблицы person, которому принадлежит данный почтовый адрес).
Judge:
person_id
(id человека из таблицы person, который является судьей);championship_id
(id чемпионата из таблицы championship, судьей которого является данный человек);work
(название компании в которой работает судья);judge_team_id
(id судейской бригады из таблицы Judge_Team, частью которой является судья).
Judge_Team:
judge_team_id
(id судейской бригады);
Mentor:
person_id
(id человека из таблицы person, который является ментором);championship_id
(id чемпионата из таблицы championship, ментором которого является данный человек).
Participant:
person_id
(id человека из таблицы person, который является участником);championship_id
(id чемпионата из таблицы championship, участником которого является данный человек);team_id
(id команды из таблицы team, участником которой является данный человек).
People:
person_id
(id человека);first_name
(имя человека);last_name
(фамилия человека);birth_date
(дата рождения);age
(возраст участника (вычисляется)).
Performance:
performance_id
(id выступления);project_id
(id проекта из таблицы project);performance_time
(время, затраченное командой на решение кейса);judge_team_id
(id судейской бригады из таблицы judge_team, которая судит данный проект);platform_id
(id места проведения из таблицы platform);points
(очки, заработанные командой).
Phone:
phone_number
(номер телефона);person_id
(id человека из таблицы person, которому принадлежит данный номер телефона).
Platform:
platform_id
(id места проведения);name
(название площадки);address
(адрес площадки);contact_person_id
(id человека из таблицы person, который является контактным лицом на площадке).
Project:
project_id
(id проекта);name
(название проекта);team_id
(id команды из таблицы team, которая делает данный проект);description
(краткое описание проекта).
Publication:
publication_id
(id публикации);name
(название публикации);description
(аннотация статьи, её краткое содержание).
Score:
team_id
(id команды из таблицы team, баллы которой храним);final_score
(финальные баллы команды);place
(место в турнирной таблице);special_award
(специальный приз).
Team:
team_id
(id команды);name
(название команды);leader_id
(id человека из таблицы participant, который является капитаном данной команды).
Из предназначения базы данных следуют основные пути её использования:
- Регистрация:
- участника;
- судьи;
- ментора;
- Создание команды.
- Оценка выступления команды;
- Открытие чемпионата;
- Закрытие чемпионата.
Прецеденты использования базы данных:
Имя прецедента | Добавление человека |
---|---|
ID | 1 |
Предусловия | О человеке должна быть обязательно заполнена следующая информация: Имя, Фамилия, Дата рождения, Адрес электронной почты и телефон. |
Основной поток |
|
Имя прецедента | Добавление участника |
---|---|
ID | 2 |
Предусловия | Об участнике чемпионата должна быть обязательно заполнена следующая информация: Имя, Фамилия, Дата рождения, Адрес электронной почты и телефон и указан id чемпионата в котором он участвует. Также участник должен быть моложе 27 лет и не являться ментором или судьёй в рамках одного чемпионата. |
Основной поток |
|
Имя прецедента | Добавление судьи |
---|---|
ID | 3 |
Предусловия | О судье чемпионата должна быть обязательно заполнена следующая информация: Имя, Фамилия, Дата рождения, Адрес электронной почты и телефон и указан id чемпионата в котором он участвует. Также судья должен иметь не менее одной публикации, быть старше 21 года и не являться ментором или участником в рамках одного чемпионата. |
Основной поток |
|
Имя прецедента | Добавление судейской бригады |
---|---|
ID | 4 |
Предусловия | Судейская бригада должна состоять ровно из 3 судей, принадлежащих одному чемпионату. |
Основной поток |
|
Имя прецедента | Добавление ментора |
---|---|
ID | 5 |
Предусловия | О менторе чемпионата должна быть обязательно заполнена следующая информация: Имя, Фамилия, Дата рождения, Адрес электронной почты и телефон и указан id чемпионата в котором он участвует. Также судья должен иметь не менее одной публикации, быть старше 21 года и не являться ментором или участником в рамках одного чемпионата. |
Основной поток |
|
Имя прецедента | Добавление публикации |
---|---|
ID | 6 |
Предусловия | У публикации должно быть название и краткое описание. |
Основной поток |
|
Имя прецедента | Добавление публикации с данными об авторах |
---|---|
ID | 7 |
Предусловия | У публикации должно быть название и краткое описание. Авторы публикации есть в таблице people . |
Основной поток |
|
Имя прецедента | Добавление сведений об авторстве в публикацию |
---|---|
ID | 8 |
Предусловия | Существуют данные о публикации в таблице publication и о человеке в таблице people . |
Основной поток |
|
Имя прецедента | Добавление команды без ментора в чемпионат |
---|---|
ID | 9 |
Предусловия | В команде должно быть от 2 до 5 человек (являются участниками одного чемпионата) среди которых должен быть капитан. |
Основной поток |
|
Имя прецедента | Добавление ментора к команде |
---|---|
ID | 10 |
Предусловия | Сведенья о команде и менторе должны существовать. |
Основной поток |
|
Имя прецедента | Добавление команды с ментором в чемпионат |
---|---|
ID | 11 |
Предусловия | В команде должно быть от 2 до 5 человек (являются участниками одного чемпионата), среди которых должен быть капитан. У команды не должно быть более 2 менторов в рамках чемпионата. Сведенья о менторах должны существовать. |
Основной поток |
|
Имя прецедента | Добавление платформ чемпионата |
---|---|
ID | 12 |
Предусловия | Платформа должна иметь название, адрес и id человека, являющегося контактным лицом чемпионата. |
Основной поток |
|
Имя прецедента | Добавление чемпионата |
---|---|
ID | 13 |
Предусловия | У чемпионата должны быть название, описание, хотя бы одна платформа проведения, хотя бы одна судейская бригада, хотя бы команда участников имеющая проект и хотя бы один кейс. |
Основной поток |
|
Имя прецедента | Добавление проекта |
---|---|
ID | 14 |
Предусловия | проекта должно быть название, описание, id команды, которая его делает, хотя бы один кейс решаемый в данном чемпионате. |
Основной поток |
|
Имя прецедента | Добавление кейса |
---|---|
ID | 15 |
Предусловия | У кейса должно быть название, описание и сложность. |
Основной поток |
|
Имя прецедента | Добавление кейса в чемпионат |
---|---|
ID | 16 |
Предусловия | Сведения о кейсе и чемпионате должны существовать. |
Основной поток |
|
Имя прецедента | Добавление кейса в проект |
---|---|
ID | 17 |
Предусловия | Сведения о кейсе и проекте должны существовать. |
Основной поток |
|
Имя прецедента | Добавление выступления |
---|---|
ID | 18 |
Предусловия | Выступление должно происходить на площадке доступной для этого чемпионата, команда с проектом и судейская бригада должны существовать. |
Основной поток |
|
Имя прецедента | Старт чемпионата |
---|---|
ID | 19 |
Предусловия | В чемпионате должны быть участники, команды, менторы, судьи и судейские бригады, платформы, кейсы и выступления для оценки. |
Основной поток |
|
Имя прецедента | Оценка выступления |
---|---|
ID | 20 |
Предусловия | чемпионат уже начался, выставляемые за проект баллы не превосходят максимальной суммы баллов по решаемым кейсам. |
Основной поток |
|
Имя прецедента | Завершение чемпионата |
---|---|
ID | 21 |
Предусловия | Чемпионат начался, все выступления оценены. |
Основной поток |
|
Эти операции, а также проверки целостности данных реализованы при помощи функций.
Функции:
add_case_to_championship
- функция позволяет осуществлять добавление информации о кейсах, представленных в чемпионате;add_mentor_to_team
- функция позволяет осуществлять добавление ментора к команде;add_publication
- функция позволяет осуществлять добавление связи между авторами и публикацией;end_championship
-функция позволяет осуществлять завершение чемпионата;insert_championship
- функция позволяет осуществлять добавление информации о чемпионате;insert_judge_team
- функция позволяет осуществлять добавление информации о судейской бригаде;insert_person
- функция позволяет осуществлять добавление человека;insert_project
- функция позволяет осуществлять добавление информации о проекте;insert_publication
- функция позволяет осуществлять добавление информации о публикации;insert_publication_with_authors
- функция позволяет осуществлять добавление публикации уже связанной с её авторами;insert_team
- функция позволяет осуществлять добавление команды без связи с ментором;insert_team_with_mentor
- функция позволяет осуществлять добавление команды вместе со связью с ментором;rate_performance
- функция позволяет осуществлять оценивание выступления команды;start_championship
- функция позволяет осуществлять добавление нового чемпионата.
Функции проверки комплексных ограничений целостности данных:
check_cases
- функция обеспечивает проверку факта наличия хотя бы одного кейса в конкретном чемпионате;check_judge
- функция обеспечивает проверку факта соответствия характеристик человека (отвечает ли он заданным требованиям для того, чтобы стать судьей);check_judge_only_update
- функция обеспечивает удаление судейской бригады в случае если судья покинул бригаду;check_judge_teams
- функция обеспечивает проверку корректности состава судейской бригады;check_mentor
- функция обеспечивает проверку факта соответствия характеристик человека (отвечает ли он заданным требованиям для того, чтобы стать ментором);check_mentor_team_dependency
- функция обеспечивает проверку может ли ментор быть закреплен за данной командой (на один ли чемпионат они зарегистрированы);check_participant
- функция обеспечивает проверку факта соответствия характеристик человека (отвечает ли он заданным требованиям для того, чтобы стать участником);check_participant_only_update
- функция обеспечивает удаление команды участников в случае если её покидает хотя бы один участник;check_performance
- функция обеспечивает проверку возможности выступать на данной платформе в рамках конкретного чемпионата;check_performances
- функция обеспечивает проверку возможности выступления (есть платформа для выступления и хотя бы одна судейская бригада для оценки);check_person_contact_info
- функция обеспечивает проверку наличия контактной информации о человеке, такой как адрес электронной почты и номер телефона;check_platforms
- функция обеспечивает проверку наличия хотя бы одной платформы у чемпионата;check_projects
- функция обеспечивает проверку факта наличия в чемпионате хотя бы одного проекта, включающего в себя кейсы данного чемпионата;check_teams
- функция обеспечивает проверку команды на соответствие правилам для участия (от двух до пяти участников, один из которых является капитаном, не более двух менторов);
Триггеры:
checkJudie
- срабатывает при вызове функцииaddJudie
и вызывает проверку корректности заполнения полей данных о судье;checkMentor
- срабатывает при вызове функцииaddMentor
и вызывает проверку корректности заполнения полей данных о менторе;checkParticipant
- срабатывает при вызове функцииaddParticipant
и вызывает проверку корректности заполнения полей данных об участнике;checkTeam
- срабатывает при вызове функцииcreateTeam
и вызывает проверку корректности заполнения полей данных о менторе.
PostgreSQL автоматически создает hash-индексы для атрибутов primary key
. В данной работе используются в основном проверки
и сравнения именно по первичному ключу. Также ускорения взаимодействия с базой данных были дополнительно созданы btree-индексы:
Индексы:
birth_date_btree_index
- btree индекс на атрибутbirth_date
таблицыpeople
, позволяющий ускорить операции сравнения;final_score_btree_index
- btree индекс на атрибутbegin_date
таблицыchampionship
, позволяющий ускорить операции сравнения;final_score_hash_index
- hash индекс на атрибутfinal_score
таблицыscore
, позволяющий ускорить операции сравнения;last_name_btree_index
- btree индекс на атрибутlast_name
таблицыpeople
, позволяющий ускорить операции сравнения;last_name_hash_index
- hash индекс на атрибутlast_name
таблицыpeople
, позволяющий ускорить операции сравнения;performance_time_index
- btree индекс на атрибутperformance_time
таблицыperformanse
, позволяющий ускорить операции сравнения;place_index
_ btree индекс на атрибутplace
таблицыscore
, позволяющий ускорить операции сравнения.project_name_index
_ btree индекс на атрибутname
таблицыproject
, позволяющий ускорить операции сравнения.team_name_index
_ btree индекс на атрибутname
таблицыteam
, позволяющий ускорить операции сравнения.