Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/avvessalom/itmo-information-systems-and-databases-course-project

Курсовой проект по Информационным системам и базам данных (ИТМО, ПИиКТ-СиППО, 3 курс).
https://github.com/avvessalom/itmo-information-systems-and-databases-course-project

itmo itmo-university naruto naruto-shippuuden postgres postgresql react

Last synced: 9 days ago
JSON representation

Курсовой проект по Информационным системам и базам данных (ИТМО, ПИиКТ-СиППО, 3 курс).

Awesome Lists containing this project

README

        

# Курсовой проект по предмету Информационные системы и базы данных

### Предметная область "Вселенная анимационного сериала Наруто"

Существует мир ниндзя. В нём живут ниндзя и обычные люди. Мир разделён на страны, охраняемые деревнями (скрытыми селениями). Каждая страна охраняется одной и только одной деревней. Ниндзя живут в деревнях. Один ниндзя может жить только в одной деревне. Ниндзя принадлежит клану. Ниндзя может принадлежать только одному клану. Если родители из разных кланов выбирается более престижный. Бидзю это древние животные ниндзя. Деревня может захватить бидзю и запечатать его в одном из ниндзя, этот ниндзя становится Джинчурики. Бидзю различаются количеством хвостов, от одного до десяти, чем больше хвостов, тем он сильнее. Семьи ниндзя, проживающие в скрытых деревнях, отдают своих детей в академию ниндзя в малом возрасте и детям назначается ранг ученик академии. Каждый ниндзя в период службы зарабатывает ранги: ученик академии/генин/чунин/джонин/анбу/каге. Получение второго и третего рангов сопровождается экзаменом, по его итогам решается, перешел ли ниндзя на следующую ступень. Ниндзя используют техники. Техники могут быть запретными, могут быть особенностью клана, могут быть стихийными. Техники особенностей клана используют только наследники клана. Ниндзя участвуют в сражениях и войнах. Сражения происходят на территориях разных стран, рождают героев и получают жертвы. Если во время войны был убит глава деревни (Каге), по итогам войны выбирается новый из числа героев. В войнах также есть противоборствующие стороны, но также войны являются совокупностью битв.

### Модель базы данных
![модель базы данных](https://github.com/Avvessalom/ITMO-Information-Systems-and-Databases-Course-Project/blob/main/img/KP.png)
### Сценарии использования базы данных
Основное предназначение базы данных, это сохранение данных о мире ниндзя, сохранение истории и техник.

Из предназначения базы данных следуют основные пути её использования:
* Добавление нового(новой):
* ниндзя;
* гражданина;
* техники;
* клана;
* войны;
* битвы.
* Разрушение скрытой деревни ниндзя;
* Восстановление разрушенной деревни ниндзя;
* Смена джинчурики;

#### Описание основных прецедентов
Прецедент | Добавление нового ниндзя
:-----: | :----
ID | 1
Краткое описание | В таблицу `Ninja` добавляется новый ниндзя
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | О ниндзя должна быть обязательно заполнена следующая информация: имя, клан, возраст, пол, деревня, а также должно быть известно мертв он или жив. Клан и деревня к которым привязан ниндзя должны существовать.
Основной поток |


  1. Администратор базы данных или историк ниндзя вносят информацию о ниндзя: `name`, `clan`, `village`, `age`, `sex`, `status`

  2. Создается ниндзя с `name`, `clan`, `village`, `age`, `sex`, `status`

Прецедент | Добавление нового гражданина
:----- | :----
ID | 2
Краткое описание | В таблицу `Citizen` добавляется новый гражданин
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | О гражданине должна быть обязательно заполнена следующая информация: имя, возраст, пол, деревня, а также должно быть известно мертв он или жив. Деревня к которой привязан гражданин должна существовать.
Основной поток |


  1. Администратор базы данных или историк ниндзя вносят информацию о гражданине: `name`, `village`, `age`, `sex`, `status`

  2. Создается гражданин с `name`, `village`, `age`, `sex`, `status`

Прецедент | Добавление новой техники
:----- | :----
ID | 3
Краткое описание | В таблицу `Technic` добавляется новая техника
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | О технике обязательно должна быть заполнена следующая информация: тип, дополнительный тип, является ли техника "ограничением крови", элемент техники, ранг, последовательность печатей для использования, имя. Тип, дополнительный тип и ранг техники должны существовать. Если техника является "ограничением крови", то клан использующий эту технику должен существовать.
Основной поток |


  1. Администратор базы данных или историк ниндзя вносят информацию о технике: `type`, `additional_type`, `blood_restriction`, `element`, `rank`, `rune seals`, `name`

  2. Создается техника с `type`, `additional_type`, `blood_restriction`, `element`, `rank`, `rune seals`, `name`

Прецедент | Добавление нового клана
:----- | :----
ID | 4
Краткое описание | В таблицу `Clan` добавляется новый клан
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | О клане обязательно должна быть заполнена следующая информация: название, деревня к которой этот клан привязан, престижность клана. Деревня должна существовать.
Основной поток |


  1. Администратор базы данных или историк ниндзя вносят информацию о клане: `name`, `village`, `prestige`

  2. Создается клан с `name`, `village`, `prestige`




Прецедент | Добавление новой войны
:----- | :----
ID | 5
Краткое описание | В таблицу `War` добавляется новая война
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | О войне обязательно должна быть заполнена следующая информация: название, атакующая страна, защищающаяся страна, потери атакующих, потери обороняющихся, дата начала войны. Атакующая и обороняющаяся страны должны существовать.
Основной поток |

  1. Администратор базы данных или историк ниндзя вносят информацию о войне: `name`, `attacking_country`, `defending_country`, `loss_of_attackers`, `loss_of_defenders`, `start_date`. Если война уже закончилась, то также вносится `end date`

  2. Создаётся война с `name`, `attacking_country`, `defending_country`, `loss_of_attackers`, `loss_of_defenders`, `start_date`. Если была указана `end_date` то и с ней тоже



Прецедент | Добавление новой битвы
:----- | :----
ID | 6
Краткое описание | В таблицу `Battle` добавляется новая битва
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | О битве обязательно должна быть заполнена следующая информация: война во время которой прошла эта битва, на территории какой страны прошла, потери, продолжительность, название, дата. Война и страна на территории которой прошла битва должны существовать.
Основной поток |

  1. Администратор базы данных или историк ниндзя вносят информацию о битве: `war`, `territory`, `loss`, `durration`, `name`, `date_of_battle`

  2. Создаётся битва с `war`, `territory`, `loss`, `durration`, `name`, `date_of_battle`



Прецедент | Разрушение скрытой деревни ниндзя
:----- | :----
ID | 7
Краткое описание | Существующая скрытая деревня ниндзя разрушается
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | Деревня должна существовать. Известно, что деревня была разрушена.
Основной поток |

  1. Администратор базы данных или историк ниндзя удаляют выбранную деревню;

  2. Подсчитывается количество разрушений этой деревни

  3. Информация о деревне и количестве её разрушений помещаются в таблицу `Destroyed_village`

  4. В таблицу `Hidden_village` помещаются руины



Прецедент | Добавление пары Родитель_Ребенок
:----- | :----
ID | 8
Краткое описание | В таблицу `Parents` добавляется родитель и ребенок
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | Родитель и ребенок должны существовать.
Основной поток |

  1. Администратор базы данных или историк ниндзя вносят в таблицу `Parents` пару Родитель_Ребенок

  2. Проверяется уже существующее количество родителей у этого ребенка

  3. Если родителей больше одного, то выводится исключение, запрещающее ребенку иметь более двух родителей

  4. Если родитель один, то проверяется не совпадает ли, уже имеющийся родитель с новодобавленным

  5. Если совпадает, то выводится исключение, запрещающее добавлять одного родителя дважды для одного ребенка

  6. Если родителей нет, то пара добавляется



Прецедент | Проверка пары Ниндзя_Клан
:----- | :----
ID | 9
Краткое описание | Проверка, находится ли ниндзя в указанном клане
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | Должна быть заполнена следующая информация: уникальный идентификатор ниндзя, уникальный идентификатор клана. Ниндзя и клан должны существовать.
Основной поток |
    Администратор базы данных или историк ниндзя вводят информацию об клане и ниндзя>
  1. Проверяется присутствует ли указанный ниндзя в указанном клане



Прецедент | Определение клана ребенка
:----- | :----
ID | 10
Краткое описание | При рождении ребенка от родителей из разных кланов, выбирается более престижный
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | Обязательно должна быть заполнена следующая информация: уникальный идентификатор ребенка. У ребенка должно быть два родителя, кланы родителей должны существовать.
Основной поток |

  1. Администратор базы данных или историк ниндзя вводят информацию о ребенке

  2. Выбираются родители этого ребенка

  3. Выбираются кланы родителей

  4. Вычисляется, клан какого из родителей престижнее

  5. В таблицу `Ninja`, в поле `clan` вносятся изменения.



Прецедент | Запечатывание Бидзю
:----- | :----
ID | 11
Краткое описание | Обновляется информация о Бидзю и его джинчурики(старом и новом)
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | Обязательно должна быть заполнена следующая информация: уникальный идентификатор бидзю, уникальный идентификатор нового джинчурики. Бидзю и джинчурики должны существовать.
Основной поток |

  1. Администратор базы данных или историк ниндзя вводят информацию о запечатываемом бидзю и о его новом джинчурики

  2. Выбирается старый джинчурики

  3. Статус старого джинчурики изменяется на `dead`

  4. В таблицу `jinchuriki` добавляется новая пара Бидзю_Джинчурики



Прецедент | Выбор кандидатов на должность Каге
:----- | :----
ID | 12
Краткое описание | Выбираются достойные кандидаты, которые могут занимать должность Каге.
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | Обязательно должна быть заполнена следующая информация: уникальный идентификатор старого Каге, война в которой он погиб.
Основной поток |

  1. Администратор базы данных или историк ниндзя вводят информацию о Каге и его смерти

  2. Выбирается деревня погибшего каге

  3. Выбираются герои войны, в которой погиб Каге и из них выбираются жители деревни погибшего Каге

  4. Выводятся кандидаты на пост Каге



Прецедент | Смерть ниндзя
:----- | :----
ID | 13
Краткое описание | При изменении статуса ниндзя с `alive` на `dead`
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | Статус ниндзя изменился с `alive` на `dead`
Основной поток |

  1. Администратор базы данных или историк ниндзя обновляют статус ниндзя

  2. Проверяется ранг погибшего ниндзя

  3. Если ранг равен `Kage`, то выполняется прецедент "Выбор кандидатов на должность Каге"(ID 12)



Прецедент | Добавление нового лидера клана
:----- | :----
ID | 14
Краткое описание | При обновлении лидера клана проверяется, является ли он членом этого клана
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | Обновляется глава существующего клана. Клан должен существовать. Проверяемый глава клана должен существовать.
Основной поток |

  1. Администратор базы данных или историк ниндзя обновляют информацию о главе клана.

  2. Проверяется, является ли претендент членом клана

  3. Если нет, вызывается исключение, запрещающее не членам клана являться его главой.

  4. Если он является членом клана, проверяется его статус

  5. Если статус равен `dead`, то вызывается исключение, запрещающее мертвым ниндзя назначаться новыми лидерами клана

  6. Если статус `alive` то в таблицу `clan_leader` вносятся изменения



Прецедент | Период правления
:----- | :----
ID | 15
Краткое описание | подсчет периода правления правителя
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | правитель существует
Основной поток |

  1. Администратор базы данных или историк ниндзя запрашивает время првления главы государства

  2. Запрашивается дата начала

  3. Запрашивается дата конца

  4. Подсчитывается время правления (в днях)



Прецедент | Время правления глав стран
:----- | :----
ID | 16
Краткое описание | подсчитывается время правления глав государства
Главные акторы | Администратор базы данных, историк ниндзя
Второстепенные акторы | нет
Предусловия | Глава государства существует
Основной поток |

  1. Администратор базы данных или историк ниндзя запрашивают информацию о времени правления глав государств

  2. запрашивается информация правлении о лидеров




### Функции:
* `clan_selection_for_a_child` - функция позволяет определять принадлежность новорожденного ниндзя к клану;
* `seal_the_biju` - функция позволяет осуществлять смену Джинчурики;
* `choose_kage_candidates` - функция позволяет показать кандидатов на должность нового Каге в случае смерти предыдущего;
* `check_clan` - простая вспомогательная функция, возвращающая присутствует проверяемый ниндзя в проверяемом клане или нет
* `period_of_government` - функция вычисляющая продолжительность правления Правителя страны
### Триггеры:
* `on_destroy` - триггер срабатывающий при взаимодействии с `destroyed_village` и добавляющий руины на место уничтоженной деревни;
* `on_jinchuriki_die` - триггер запрещающий удаление Джинчурики;
* `on_actions_with_village` - триггер срабатывающий при удалении деревни из `hidden_village` и автоматически вносящий изменения в `destroyed_village`;
* `on_death` - триггер срабатывающий при смерти ниндзя и проверяющий был ли он Каге. В случае если это так начинается подбор кандидатов на его место.
* `check_blood_restriction` - триггер срабатывающий каждый раз, когда к ниндзя добавляется новая техника. Триггер проверяет, является ли техника особенностью клана. И если является, то может ли этот ниндзя её использовать.
* `check_clan_leader` - триггер срабатывающий при обновлении лидеров клана. Проверяет, присутствует ли претендент в клане и жив ли он
* `check_parents` - триггер срабатывающий при добавлении пары `Родитель_Ребенок` и проверяющий не является ли родитель этого ребенка дважды его родителем. Также проверяется количество родителей, не больше двух.
### Индексы:
Базе данных не требуются индексы, кроме стандартных `b-tree` индексов, которые автоматически генерирует `Postgres`, так-как операции производятся по `Ключам`.