dmigranov / db-project

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Computer firm

Этот репозиторий содержит программу для работы с базой данных компьютерной фирмы.

Необходимые ссылки:

  1. Тех.задание
  2. Этап 1, описание модели базы данных
  3. Этап 2, описание хранимых функций, триггеров, запросов

Для запуска приложения:

  1. Установите следующие компоненты:
  • Java версии 8 или выше;
  • Play Framework 1.5.x;
  • Oracle Database 18c XE;
  1. Перейдите в папку с установленным Play Framework;
  2. В консоли выполните команду:

play new computerfirm (Windows);
./play new computerfirm (Linux);

  1. Клонируйте содержимое репозитория в созданную папку computerfirm;
  2. В файле computerfirm/conf/application.conf установите необходимые логин и пароль к установленной базе Oracle в полях соответственно;

db.default.user;
db.default.pass;
db.default.driver=oracle.jdbc.OracleDriver
db.default.url=jdbc:oracle:thin:@localhost:1521/XE

  1. В папке с установленным Play Framework в консоли выполните команду:

play run computerfirm (Windows);
./play run computerfirm (Linux);

  1. В браузере в строке поиска наберите URL:

localhost:9000

  1. На данный момент доступные URL:

/ - главная страница с ссылками на другие /salary - зарплаты сотрудников
/projects?{id} - проекты, на которых задействован сотрудник с данным id, с возможностью выбора сотрудника в выпадающем списке
/details - список деталей на складе с возможностью добавления
/allprojects?{type, order} - список всех проектов (сортировка по сумме и типу)
/troubles - список неполадок, c количеством их происшествий /addproject - добавить проект (не закончено) /populardetails - популярные детали /troubles - список неполадок, c количеством их происшествий /employees - управление сотрудниками (удаление)

  1. Примеры страниц находятся в папке page-examples

Этап 3: распределение работ

Мигранов: каркас приложения, программирование моделей, запросы, html-страницы
Болдырев: html-страницы, запросы, README

Этап 4: распределение работ:

Мигранов:

  • В /projects можно теперь выбирать работника, для которого будут выводиться проекты, и даты, в промежутке между которых лежит дата начала работы над проектом
  • Популярные детали с выбором типа деталей из списка
  • Добавление (при попытке добавить плохое - уведомление) и удаление работников (в том числе можно удалять и тех, кто задействован на каких-либо проектах; информация о проектах сохранится, но о работниках - будет ожидаемо потеряна)
  • Добавление (при попытке добавить что-то плохое - уведомление) и удаление деталей со склада (при попытке удалить деталь, использующуюся в каких=то проектах, будет выдано уведомление о невозможности этого)
  • Добавление (при попытке добавить что-то плохое - уведомление) и удаление клиентов (в том числе можно удалять и тех, кто указан в каких-либо проектах; информация о проектах сохранится, но о клиентах - будет ожидаемо из них удалена)
  • Начат интерфейс для добавления проектов.

Чтобы добавление заказов на детали работало корректно (т.е. чтобы при добавлении заказа детали изымались со склада и нельзя было добавить несуществующее число деталей) нужно вручную добавить в базу триггер:

CREATE OR REPLACE TRIGGER detail_orders_insert_trigger BEFORE INSERT ON DetailOrder
FOR EACH ROW
DECLARE
detail_count Detail.count%TYPE;
not_enough_details EXCEPTION;
BEGIN
SELECT count INTO detail_count FROM Detail WHERE id = :new.detail_id;

IF detail_count < :NEW.count THEN
    RAISE not_enough_details;
END IF;

UPDATE Detail SET Detail.count = detail_count - :NEW.count WHERE id = :new.detail_id;
END;

И хранимую процедуру:

create or replace PROCEDURE get_assembling(type IN VARCHAR2, result OUT NUMBER)
IS

wrong_assembling_type EXCEPTION;

BEGIN

IF type = 'max' THEN
SELECT SUM(a) INTO result FROM (SELECT MAX(cost) AS a FROM Detail GROUP BY type_id);
ELSIF type = 'min' THEN
SELECT SUM(b) INTO result FROM (SELECT MIN(cost) AS b FROM Detail GROUP BY type_id);
ELSE
RAISE wrong_assembling_type;
END IF;

END get_assembling;

Болдырев:

  • Запрос самых популярных клиентов;
  • Хранимая процедура.
  • clientProjects

About


Languages

Language:HTML 72.0%Language:Java 28.0%