{"id":15973910,"url":"https://github.com/avvessalom/itmo-information-systems-and-databases-course-project","last_synced_at":"2026-05-08T14:18:38.154Z","repository":{"id":47779026,"uuid":"305807447","full_name":"Avvessalom/ITMO-Information-Systems-and-Databases-Course-Project","owner":"Avvessalom","description":"Курсовой проект по Информационным системам и базам данных (ИТМО, ПИиКТ-СиППО, 3 курс).","archived":false,"fork":false,"pushed_at":"2021-08-13T08:39:49.000Z","size":69713,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-10T01:46:37.640Z","etag":null,"topics":["itmo","itmo-university","naruto","naruto-shippuuden","postgres","postgresql","react"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Avvessalom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-20T19:03:47.000Z","updated_at":"2021-10-04T13:46:19.000Z","dependencies_parsed_at":"2022-09-03T05:00:34.135Z","dependency_job_id":null,"html_url":"https://github.com/Avvessalom/ITMO-Information-Systems-and-Databases-Course-Project","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Avvessalom%2FITMO-Information-Systems-and-Databases-Course-Project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Avvessalom%2FITMO-Information-Systems-and-Databases-Course-Project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Avvessalom%2FITMO-Information-Systems-and-Databases-Course-Project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Avvessalom%2FITMO-Information-Systems-and-Databases-Course-Project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Avvessalom","download_url":"https://codeload.github.com/Avvessalom/ITMO-Information-Systems-and-Databases-Course-Project/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247208416,"owners_count":20901570,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["itmo","itmo-university","naruto","naruto-shippuuden","postgres","postgresql","react"],"created_at":"2024-10-07T21:22:04.900Z","updated_at":"2026-05-08T14:18:33.126Z","avatar_url":"https://github.com/Avvessalom.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Курсовой проект по предмету Информационные системы и базы данных\n\n### Предметная область \"Вселенная анимационного сериала Наруто\"\n\nСуществует мир ниндзя. В нём живут ниндзя и обычные люди. Мир разделён на страны, охраняемые деревнями (скрытыми селениями). Каждая страна охраняется одной и только одной деревней. Ниндзя живут в деревнях. Один ниндзя может жить только в одной деревне. Ниндзя принадлежит клану. Ниндзя может принадлежать только одному клану. Если родители из разных кланов выбирается более престижный. Бидзю это древние животные ниндзя. Деревня может захватить бидзю и запечатать его в одном из ниндзя, этот ниндзя становится Джинчурики. Бидзю различаются количеством хвостов, от одного до десяти, чем больше хвостов, тем он сильнее. Семьи ниндзя, проживающие в скрытых деревнях, отдают своих детей в академию ниндзя в малом возрасте и детям назначается ранг ученик академии. Каждый ниндзя в период службы зарабатывает ранги: ученик академии/генин/чунин/джонин/анбу/каге. Получение второго и третего рангов сопровождается экзаменом, по его итогам решается, перешел ли ниндзя на следующую ступень. Ниндзя используют техники. Техники могут быть запретными, могут быть особенностью клана, могут быть стихийными. Техники особенностей клана используют только наследники клана. Ниндзя участвуют в сражениях и войнах. Сражения происходят на территориях разных стран, рождают героев и получают жертвы. Если во время войны был убит глава деревни (Каге), по итогам войны выбирается новый из числа героев. В войнах также есть противоборствующие стороны, но также войны являются совокупностью битв.\n\n### Модель базы данных \n![модель базы данных](https://github.com/Avvessalom/ITMO-Information-Systems-and-Databases-Course-Project/blob/main/img/KP.png)\n### Сценарии использования базы данных\nОсновное предназначение базы данных, это сохранение данных о мире ниндзя, сохранение истории и техник.\n\nИз предназначения базы данных следуют основные пути её использования:\n* Добавление нового(новой):\n    * ниндзя;\n    * гражданина;\n    * техники;\n    * клана;\n    * войны;\n    * битвы.\n* Разрушение скрытой деревни ниндзя;\n* Восстановление разрушенной деревни ниндзя;\n* Смена джинчурики;\n\n#### Описание основных прецедентов\nПрецедент             | Добавление нового ниндзя \n:-----:               | :---- \nID                    | 1 \nКраткое описание      | В таблицу `Ninja` добавляется новый ниндзя\nГлавные акторы        | Администратор базы данных, историк ниндзя\nВторостепенные акторы | нет\nПредусловия           | О ниндзя должна быть обязательно заполнена следующая информация: имя, клан, возраст, пол, деревня, а также должно быть известно мертв он или жив. Клан и деревня к которым привязан ниндзя должны существовать.\nОсновной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя вносят информацию о ниндзя: `name`, `clan`, `village`, `age`, `sex`, `status`\u003c/li\u003e\u003cli\u003eСоздается ниндзя с `name`, `clan`, `village`, `age`, `sex`, `status`\u003c/li\u003e\u003c/ol\u003e    \n\nПрецедент             | Добавление нового гражданина \n:-----                | :----\nID                    | 2 \nКраткое описание      | В таблицу `Citizen` добавляется новый гражданин\nГлавные акторы        | Администратор базы данных, историк ниндзя\nВторостепенные акторы | нет\nПредусловия           | О гражданине должна быть обязательно заполнена следующая информация: имя, возраст, пол, деревня, а также должно быть известно мертв он или жив. Деревня к которой привязан гражданин должна существовать.\nОсновной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя вносят информацию о гражданине: `name`, `village`, `age`, `sex`, `status`\u003c/li\u003e\u003cli\u003eСоздается гражданин с `name`, `village`, `age`, `sex`, `status`\u003c/li\u003e\u003c/ol\u003e    \n\n\nПрецедент             | Добавление новой техники \n:-----                | :---- \nID                    | 3 \nКраткое описание      | В таблицу `Technic` добавляется новая техника\nГлавные акторы        | Администратор базы данных, историк ниндзя\nВторостепенные акторы | нет\nПредусловия           | О технике обязательно должна быть заполнена следующая информация: тип, дополнительный тип, является ли техника \"ограничением крови\", элемент техники, ранг, последовательность печатей для использования, имя. Тип, дополнительный тип и ранг техники должны существовать. Если техника является \"ограничением крови\", то клан использующий эту технику должен существовать.\nОсновной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя вносят информацию о технике: `type`, `additional_type`, `blood_restriction`, `element`, `rank`, `rune seals`, `name`\u003c/li\u003e\u003cli\u003eСоздается техника с `type`, `additional_type`, `blood_restriction`, `element`, `rank`, `rune seals`, `name`\u003c/li\u003e\u003c/ol\u003e    \n\n\nПрецедент             | Добавление нового клана \n:-----                | :----\nID                    | 4 \nКраткое описание      | В таблицу `Clan` добавляется новый клан\nГлавные акторы        | Администратор базы данных, историк ниндзя\nВторостепенные акторы | нет\nПредусловия           | О клане обязательно должна быть заполнена следующая информация: название, деревня к которой этот клан привязан, престижность клана. Деревня должна существовать.\nОсновной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя вносят информацию о клане: `name`, `village`, `prestige`\u003c/li\u003e\u003cli\u003eСоздается клан с `name`, `village`, `prestige`\u003c/li\u003e\u003c/ol\u003e    \n \n \n Прецедент             | Добавление новой войны \n :-----                | :----\n ID                    | 5 \n Краткое описание      | В таблицу `War` добавляется новая война\n Главные акторы        | Администратор базы данных, историк ниндзя\n Второстепенные акторы | нет\n Предусловия           | О войне обязательно должна быть заполнена следующая информация: название, атакующая страна, защищающаяся страна, потери атакующих, потери обороняющихся, дата начала войны. Атакующая и обороняющаяся страны должны существовать.\n Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя вносят информацию о войне: `name`, `attacking_country`, `defending_country`, `loss_of_attackers`, `loss_of_defenders`, `start_date`. Если война уже закончилась, то также вносится `end date` \u003c/li\u003e\u003cli\u003eСоздаётся война с `name`, `attacking_country`, `defending_country`, `loss_of_attackers`, `loss_of_defenders`, `start_date`. Если была указана `end_date` то и с ней тоже\u003c/li\u003e\u003c/ol\u003e\n \n Прецедент              | Добавление новой битвы \n  :-----                | :----\n  ID                    | 6 \n  Краткое описание      | В таблицу `Battle` добавляется новая битва\n  Главные акторы        | Администратор базы данных, историк ниндзя\n  Второстепенные акторы | нет\n  Предусловия           | О битве обязательно должна быть заполнена следующая информация: война во время которой прошла эта битва, на территории какой страны прошла, потери, продолжительность, название, дата. Война и страна на территории которой прошла битва должны существовать. \n  Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя вносят информацию о битве: `war`, `territory`, `loss`, `durration`, `name`, `date_of_battle`\u003c/li\u003e\u003cli\u003e Создаётся битва с `war`, `territory`, `loss`, `durration`, `name`, `date_of_battle`\u003c/li\u003e\u003c/ol\u003e\n  \n  Прецедент              | Разрушение скрытой деревни ниндзя \n   :-----                | :----\n   ID                    | 7 \n   Краткое описание      | Существующая скрытая деревня ниндзя разрушается\n   Главные акторы        | Администратор базы данных, историк ниндзя\n   Второстепенные акторы | нет\n   Предусловия           | Деревня должна существовать. Известно, что деревня была разрушена.\n   Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя удаляют выбранную деревню;\u003c/li\u003e\u003cli\u003eПодсчитывается количество разрушений этой деревни\u003c/li\u003e\u003cli\u003eИнформация о деревне и количестве её разрушений помещаются в таблицу `Destroyed_village`\u003c/li\u003e\u003cli\u003eВ таблицу `Hidden_village` помещаются руины\u003c/li\u003e\u003c/ol\u003e\n   \n   Прецедент             | Добавление пары Родитель_Ребенок\n   :-----                | :----\n   ID                    | 8 \n   Краткое описание      | В таблицу `Parents` добавляется родитель и ребенок\n   Главные акторы        | Администратор базы данных, историк ниндзя\n   Второстепенные акторы | нет\n   Предусловия           | Родитель и ребенок должны существовать.\n   Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя вносят в таблицу `Parents` пару Родитель_Ребенок\u003c/li\u003e\u003cli\u003eПроверяется уже существующее количество родителей у этого ребенка\u003c/li\u003e\u003cli\u003eЕсли родителей больше одного, то выводится исключение, запрещающее ребенку иметь более двух родителей\u003c/li\u003e\u003cli\u003eЕсли родитель один, то проверяется не совпадает ли, уже имеющийся родитель с новодобавленным\u003c/li\u003e\u003cli\u003eЕсли совпадает, то выводится исключение, запрещающее добавлять одного родителя дважды для одного ребенка\u003c/li\u003e\u003cli\u003eЕсли родителей нет, то пара добавляется\u003c/li\u003e\u003c/ol\u003e\n    \n   Прецедент             | Проверка пары Ниндзя_Клан \n   :-----                | :----\n   ID                    | 9 \n   Краткое описание      | Проверка, находится ли ниндзя в указанном клане\n   Главные акторы        | Администратор базы данных, историк ниндзя\n   Второстепенные акторы | нет\n   Предусловия           | Должна быть заполнена следующая информация: уникальный идентификатор ниндзя, уникальный идентификатор клана. Ниндзя и клан должны существовать.\n   Основной поток        | \u003col\u003cli\u003eАдминистратор базы данных или историк ниндзя вводят информацию об клане и ниндзя\u003c/li\u003e\u003e\u003cli\u003eПроверяется присутствует ли указанный ниндзя в указанном клане\u003c/li\u003e\u003c/ol\u003e\n    \n   Прецедент             | Определение клана ребенка \n   :-----                | :----\n   ID                    | 10 \n   Краткое описание      | При рождении ребенка от родителей из разных кланов, выбирается более престижный\n   Главные акторы        | Администратор базы данных, историк ниндзя\n   Второстепенные акторы | нет\n   Предусловия           | Обязательно должна быть заполнена следующая информация: уникальный идентификатор ребенка. У ребенка должно быть два родителя, кланы родителей должны существовать.\n   Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя вводят информацию о ребенке\u003c/li\u003e\u003cli\u003eВыбираются родители этого ребенка\u003c/li\u003e\u003cli\u003eВыбираются кланы родителей\u003c/li\u003e\u003cli\u003eВычисляется, клан какого из родителей престижнее\u003c/li\u003e\u003cli\u003eВ таблицу `Ninja`, в поле `clan` вносятся изменения.\u003c/li\u003e\u003c/ol\u003e\n    \n   Прецедент             | Запечатывание Бидзю \n   :-----                | :----\n   ID                    | 11 \n   Краткое описание      | Обновляется информация о Бидзю и его джинчурики(старом и новом) \n   Главные акторы        | Администратор базы данных, историк ниндзя\n   Второстепенные акторы | нет\n   Предусловия           | Обязательно должна быть заполнена следующая информация: уникальный идентификатор бидзю, уникальный идентификатор нового джинчурики. Бидзю и джинчурики должны существовать.\n   Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя вводят информацию о запечатываемом бидзю и о его новом джинчурики\u003c/li\u003e\u003cli\u003eВыбирается старый джинчурики\u003c/li\u003e\u003cli\u003eСтатус старого джинчурики изменяется на `dead`\u003c/li\u003e\u003cli\u003eВ таблицу `jinchuriki` добавляется новая пара Бидзю_Джинчурики\u003c/li\u003e\u003c/ol\u003e\n    \n   Прецедент             | Выбор кандидатов на должность Каге  \n   :-----                | :----\n   ID                    | 12 \n   Краткое описание      | Выбираются достойные кандидаты, которые могут занимать должность Каге. \n   Главные акторы        | Администратор базы данных, историк ниндзя\n   Второстепенные акторы | нет\n   Предусловия           | Обязательно должна быть заполнена следующая информация: уникальный идентификатор старого Каге, война в которой он погиб.\n   Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя вводят информацию о Каге и его смерти\u003c/li\u003e\u003cli\u003eВыбирается деревня погибшего каге\u003c/li\u003e\u003cli\u003eВыбираются герои войны, в которой погиб Каге и из них выбираются жители деревни погибшего Каге\u003c/li\u003e\u003cli\u003eВыводятся кандидаты на пост Каге\u003c/li\u003e\u003c/ol\u003e\n    \n   Прецедент             | Смерть ниндзя\n   :-----                | :----\n   ID                    | 13 \n   Краткое описание      | При изменении статуса ниндзя с `alive` на `dead` \n   Главные акторы        | Администратор базы данных, историк ниндзя\n   Второстепенные акторы | нет\n   Предусловия           | Статус ниндзя изменился с `alive` на `dead`\n   Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя обновляют статус ниндзя\u003c/li\u003e\u003cli\u003eПроверяется ранг погибшего ниндзя\u003c/li\u003e\u003cli\u003eЕсли ранг равен `Kage`, то выполняется прецедент \"Выбор кандидатов на должность Каге\"(ID 12)\u003c/li\u003e\u003c/ol\u003e\n        \n   Прецедент             | Добавление нового лидера клана\n   :-----                | :----\n   ID                    | 14 \n   Краткое описание      | При обновлении лидера клана проверяется, является ли он членом этого клана \n   Главные акторы        | Администратор базы данных, историк ниндзя\n   Второстепенные акторы | нет\n   Предусловия           | Обновляется глава существующего клана. Клан должен существовать. Проверяемый глава клана должен существовать.\n   Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя обновляют информацию о главе клана.\u003c/li\u003e\u003cli\u003eПроверяется, является ли претендент членом клана\u003c/li\u003e\u003cli\u003eЕсли нет, вызывается исключение, запрещающее не членам клана являться его главой.\u003c/li\u003e\u003cli\u003eЕсли он является членом клана, проверяется его статус\u003c/li\u003e\u003cli\u003eЕсли статус равен `dead`, то вызывается исключение, запрещающее мертвым ниндзя назначаться новыми лидерами клана\u003c/li\u003e\u003cli\u003eЕсли статус `alive` то в таблицу `clan_leader` вносятся изменения\u003c/li\u003e\u003c/ol\u003e\n   \n   Прецедент             | Период правления\n   :-----                | :----\n   ID                    | 15 \n   Краткое описание      | подсчет периода правления правителя \n   Главные акторы        | Администратор базы данных, историк ниндзя\n   Второстепенные акторы | нет\n   Предусловия           | правитель существует\n   Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя запрашивает время првления главы государства\u003c/li\u003e\u003cli\u003eЗапрашивается дата начала\u003c/li\u003e\u003cli\u003eЗапрашивается дата конца\u003c/li\u003e\u003cli\u003eПодсчитывается время правления (в днях)\u003c/li\u003e\u003c/ol\u003e\n   \n   Прецедент             | Время правления глав стран\n   :-----                | :----\n   ID                    | 16\n   Краткое описание      | подсчитывается время правления глав государства \n   Главные акторы        | Администратор базы данных, историк ниндзя\n   Второстепенные акторы | нет\n   Предусловия           | Глава государства существует\n   Основной поток        | \u003col\u003e\u003cli\u003eАдминистратор базы данных или историк ниндзя запрашивают информацию о времени правления глав государств\u003c/li\u003e\u003cli\u003eзапрашивается информация правлении о лидеров\u003c/li\u003e\u003c/ol\u003e\n    \n    \n### Функции:\n* `clan_selection_for_a_child` - функция позволяет определять принадлежность новорожденного ниндзя к клану;\n* `seal_the_biju` - функция позволяет осуществлять смену Джинчурики;\n* `choose_kage_candidates` - функция позволяет показать кандидатов на должность нового Каге в случае смерти предыдущего;\n* `check_clan` - простая вспомогательная функция, возвращающая присутствует проверяемый ниндзя в проверяемом клане или нет\n* `period_of_government` - функция вычисляющая продолжительность правления Правителя страны\n### Триггеры:\n* `on_destroy` - триггер срабатывающий при взаимодействии с `destroyed_village` и добавляющий руины на место уничтоженной деревни;  \n* `on_jinchuriki_die` - триггер запрещающий удаление Джинчурики;\n* `on_actions_with_village` - триггер срабатывающий при удалении деревни из `hidden_village` и  автоматически вносящий изменения в `destroyed_village`; \n* `on_death` - триггер срабатывающий при смерти ниндзя и проверяющий был ли он Каге. В случае если это так начинается подбор кандидатов на его место.\n* `check_blood_restriction` - триггер срабатывающий каждый раз, когда к ниндзя добавляется новая техника. Триггер проверяет, является ли техника особенностью клана. И если является, то может ли этот ниндзя её использовать. \n* `check_clan_leader` - триггер срабатывающий при обновлении лидеров клана. Проверяет, присутствует ли претендент в клане и жив ли он\n* `check_parents` - триггер срабатывающий при добавлении пары `Родитель_Ребенок` и проверяющий не является ли родитель этого ребенка дважды его родителем. Также проверяется количество родителей, не больше двух.\n### Индексы:\nБазе данных не требуются индексы, кроме стандартных `b-tree` индексов, которые автоматически генерирует `Postgres`, так-как операции производятся по `Ключам`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favvessalom%2Fitmo-information-systems-and-databases-course-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favvessalom%2Fitmo-information-systems-and-databases-course-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favvessalom%2Fitmo-information-systems-and-databases-course-project/lists"}