Курсовой проект по Информационным системам и базам данных (ИТМО, ПИиКТ-СиППО, 3 курс).
JavaScriptGPL-3.0
Курсовой проект по предмету Информационные системы и базы данных
Предметная область "Вселенная анимационного сериала Наруто"
Существует мир ниндзя. В нём живут ниндзя и обычные люди. Мир разделён на страны, охраняемые деревнями (скрытыми селениями). Каждая страна охраняется одной и только одной деревней. Ниндзя живут в деревнях. Один ниндзя может жить только в одной деревне. Ниндзя принадлежит клану. Ниндзя может принадлежать только одному клану. Если родители из разных кланов выбирается более престижный. Бидзю это древние животные ниндзя. Деревня может захватить бидзю и запечатать его в одном из ниндзя, этот ниндзя становится Джинчурики. Бидзю различаются количеством хвостов, от одного до десяти, чем больше хвостов, тем он сильнее. Семьи ниндзя, проживающие в скрытых деревнях, отдают своих детей в академию ниндзя в малом возрасте и детям назначается ранг ученик академии. Каждый ниндзя в период службы зарабатывает ранги: ученик академии/генин/чунин/джонин/анбу/каге. Получение второго и третего рангов сопровождается экзаменом, по его итогам решается, перешел ли ниндзя на следующую ступень. Ниндзя используют техники. Техники могут быть запретными, могут быть особенностью клана, могут быть стихийными. Техники особенностей клана используют только наследники клана. Ниндзя участвуют в сражениях и войнах. Сражения происходят на территориях разных стран, рождают героев и получают жертвы. Если во время войны был убит глава деревни (Каге), по итогам войны выбирается новый из числа героев. В войнах также есть противоборствующие стороны, но также войны являются совокупностью битв.
Модель базы данных
Сценарии использования базы данных
Основное предназначение базы данных, это сохранение данных о мире ниндзя, сохранение истории и техник.
Из предназначения базы данных следуют основные пути её использования:
Добавление нового(новой):
ниндзя;
гражданина;
техники;
клана;
войны;
битвы.
Разрушение скрытой деревни ниндзя;
Восстановление разрушенной деревни ниндзя;
Смена джинчурики;
Описание основных прецедентов
Прецедент
Добавление нового ниндзя
ID
1
Краткое описание
В таблицу Ninja добавляется новый ниндзя
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
О ниндзя должна быть обязательно заполнена следующая информация: имя, клан, возраст, пол, деревня, а также должно быть известно мертв он или жив. Клан и деревня к которым привязан ниндзя должны существовать.
Основной поток
Администратор базы данных или историк ниндзя вносят информацию о ниндзя: name, clan, village, age, sex, status
Создается ниндзя с name, clan, village, age, sex, status
Прецедент
Добавление нового гражданина
ID
2
Краткое описание
В таблицу Citizen добавляется новый гражданин
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
О гражданине должна быть обязательно заполнена следующая информация: имя, возраст, пол, деревня, а также должно быть известно мертв он или жив. Деревня к которой привязан гражданин должна существовать.
Основной поток
Администратор базы данных или историк ниндзя вносят информацию о гражданине: name, village, age, sex, status
Создается гражданин с name, village, age, sex, status
Прецедент
Добавление новой техники
ID
3
Краткое описание
В таблицу Technic добавляется новая техника
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
О технике обязательно должна быть заполнена следующая информация: тип, дополнительный тип, является ли техника "ограничением крови", элемент техники, ранг, последовательность печатей для использования, имя. Тип, дополнительный тип и ранг техники должны существовать. Если техника является "ограничением крови", то клан использующий эту технику должен существовать.
Основной поток
Администратор базы данных или историк ниндзя вносят информацию о технике: type, additional_type, blood_restriction, element, rank, rune seals, name
Создается техника с type, additional_type, blood_restriction, element, rank, rune seals, name
Прецедент
Добавление нового клана
ID
4
Краткое описание
В таблицу Clan добавляется новый клан
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
О клане обязательно должна быть заполнена следующая информация: название, деревня к которой этот клан привязан, престижность клана. Деревня должна существовать.
Основной поток
Администратор базы данных или историк ниндзя вносят информацию о клане: name, village, prestige
Создается клан с name, village, prestige
Прецедент
Добавление новой войны
ID
5
Краткое описание
В таблицу War добавляется новая война
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
О войне обязательно должна быть заполнена следующая информация: название, атакующая страна, защищающаяся страна, потери атакующих, потери обороняющихся, дата начала войны. Атакующая и обороняющаяся страны должны существовать.
Основной поток
Администратор базы данных или историк ниндзя вносят информацию о войне: name, attacking_country, defending_country, loss_of_attackers, loss_of_defenders, start_date. Если война уже закончилась, то также вносится end date
Создаётся война с name, attacking_country, defending_country, loss_of_attackers, loss_of_defenders, start_date. Если была указана end_date то и с ней тоже
Прецедент
Добавление новой битвы
ID
6
Краткое описание
В таблицу Battle добавляется новая битва
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
О битве обязательно должна быть заполнена следующая информация: война во время которой прошла эта битва, на территории какой страны прошла, потери, продолжительность, название, дата. Война и страна на территории которой прошла битва должны существовать.
Основной поток
Администратор базы данных или историк ниндзя вносят информацию о битве: war, territory, loss, durration, name, date_of_battle
Создаётся битва с war, territory, loss, durration, name, date_of_battle
Прецедент
Разрушение скрытой деревни ниндзя
ID
7
Краткое описание
Существующая скрытая деревня ниндзя разрушается
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
Деревня должна существовать. Известно, что деревня была разрушена.
Основной поток
Администратор базы данных или историк ниндзя удаляют выбранную деревню;
Подсчитывается количество разрушений этой деревни
Информация о деревне и количестве её разрушений помещаются в таблицу Destroyed_village
В таблицу Hidden_village помещаются руины
Прецедент
Добавление пары Родитель_Ребенок
ID
8
Краткое описание
В таблицу Parents добавляется родитель и ребенок
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
Родитель и ребенок должны существовать.
Основной поток
Администратор базы данных или историк ниндзя вносят в таблицу Parents пару Родитель_Ребенок
Проверяется уже существующее количество родителей у этого ребенка
Если родителей больше одного, то выводится исключение, запрещающее ребенку иметь более двух родителей
Если родитель один, то проверяется не совпадает ли, уже имеющийся родитель с новодобавленным
Если совпадает, то выводится исключение, запрещающее добавлять одного родителя дважды для одного ребенка
Если родителей нет, то пара добавляется
Прецедент
Проверка пары Ниндзя_Клан
ID
9
Краткое описание
Проверка, находится ли ниндзя в указанном клане
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
Должна быть заполнена следующая информация: уникальный идентификатор ниндзя, уникальный идентификатор клана. Ниндзя и клан должны существовать.
Основной поток
<ol
Администратор базы данных или историк ниндзя вводят информацию об клане и ниндзя
>
Проверяется присутствует ли указанный ниндзя в указанном клане
Прецедент
Определение клана ребенка
ID
10
Краткое описание
При рождении ребенка от родителей из разных кланов, выбирается более престижный
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
Обязательно должна быть заполнена следующая информация: уникальный идентификатор ребенка. У ребенка должно быть два родителя, кланы родителей должны существовать.
Основной поток
Администратор базы данных или историк ниндзя вводят информацию о ребенке
Выбираются родители этого ребенка
Выбираются кланы родителей
Вычисляется, клан какого из родителей престижнее
В таблицу Ninja, в поле clan вносятся изменения.
Прецедент
Запечатывание Бидзю
ID
11
Краткое описание
Обновляется информация о Бидзю и его джинчурики(старом и новом)
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
Обязательно должна быть заполнена следующая информация: уникальный идентификатор бидзю, уникальный идентификатор нового джинчурики. Бидзю и джинчурики должны существовать.
Основной поток
Администратор базы данных или историк ниндзя вводят информацию о запечатываемом бидзю и о его новом джинчурики
Выбирается старый джинчурики
Статус старого джинчурики изменяется на dead
В таблицу jinchuriki добавляется новая пара Бидзю_Джинчурики
Прецедент
Выбор кандидатов на должность Каге
ID
12
Краткое описание
Выбираются достойные кандидаты, которые могут занимать должность Каге.
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
Обязательно должна быть заполнена следующая информация: уникальный идентификатор старого Каге, война в которой он погиб.
Основной поток
Администратор базы данных или историк ниндзя вводят информацию о Каге и его смерти
Выбирается деревня погибшего каге
Выбираются герои войны, в которой погиб Каге и из них выбираются жители деревни погибшего Каге
Выводятся кандидаты на пост Каге
Прецедент
Смерть ниндзя
ID
13
Краткое описание
При изменении статуса ниндзя с alive на dead
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
Статус ниндзя изменился с alive на dead
Основной поток
Администратор базы данных или историк ниндзя обновляют статус ниндзя
Проверяется ранг погибшего ниндзя
Если ранг равен Kage, то выполняется прецедент "Выбор кандидатов на должность Каге"(ID 12)
Прецедент
Добавление нового лидера клана
ID
14
Краткое описание
При обновлении лидера клана проверяется, является ли он членом этого клана
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
Обновляется глава существующего клана. Клан должен существовать. Проверяемый глава клана должен существовать.
Основной поток
Администратор базы данных или историк ниндзя обновляют информацию о главе клана.
Проверяется, является ли претендент членом клана
Если нет, вызывается исключение, запрещающее не членам клана являться его главой.
Если он является членом клана, проверяется его статус
Если статус равен dead, то вызывается исключение, запрещающее мертвым ниндзя назначаться новыми лидерами клана
Если статус alive то в таблицу clan_leader вносятся изменения
Прецедент
Период правления
ID
15
Краткое описание
подсчет периода правления правителя
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
правитель существует
Основной поток
Администратор базы данных или историк ниндзя запрашивает время првления главы государства
Запрашивается дата начала
Запрашивается дата конца
Подсчитывается время правления (в днях)
Прецедент
Время правления глав стран
ID
16
Краткое описание
подсчитывается время правления глав государства
Главные акторы
Администратор базы данных, историк ниндзя
Второстепенные акторы
нет
Предусловия
Глава государства существует
Основной поток
Администратор базы данных или историк ниндзя запрашивают информацию о времени правления глав государств
запрашивается информация правлении о лидеров
Функции:
clan_selection_for_a_child - функция позволяет определять принадлежность новорожденного ниндзя к клану;
seal_the_biju - функция позволяет осуществлять смену Джинчурики;
choose_kage_candidates - функция позволяет показать кандидатов на должность нового Каге в случае смерти предыдущего;
check_clan - простая вспомогательная функция, возвращающая присутствует проверяемый ниндзя в проверяемом клане или нет
period_of_government - функция вычисляющая продолжительность правления Правителя страны
Триггеры:
on_destroy - триггер срабатывающий при взаимодействии с destroyed_village и добавляющий руины на место уничтоженной деревни;
on_actions_with_village - триггер срабатывающий при удалении деревни из hidden_village и автоматически вносящий изменения в destroyed_village;
on_death - триггер срабатывающий при смерти ниндзя и проверяющий был ли он Каге. В случае если это так начинается подбор кандидатов на его место.
check_blood_restriction - триггер срабатывающий каждый раз, когда к ниндзя добавляется новая техника. Триггер проверяет, является ли техника особенностью клана. И если является, то может ли этот ниндзя её использовать.
check_clan_leader - триггер срабатывающий при обновлении лидеров клана. Проверяет, присутствует ли претендент в клане и жив ли он
check_parents - триггер срабатывающий при добавлении пары Родитель_Ребенок и проверяющий не является ли родитель этого ребенка дважды его родителем. Также проверяется количество родителей, не больше двух.
Индексы:
Базе данных не требуются индексы, кроме стандартных b-tree индексов, которые автоматически генерирует Postgres, так-как операции производятся по Ключам.