Nigota / BDlaby

0 stars 0 forks source link

лаб 7 #5

Open lasbio opened 10 months ago

lasbio commented 10 months ago

1 - в принципе правильно, но будет проще, если передать в качестве аргументов memid и slots. 2-5 - не выполнено

lasbio commented 10 months ago

2 - (а) включите в скрипт все создаваемые структуры.
(б) надо защитить от удаление уже оплаченное, у Вас наоборот (в) зачем case в TRIGGER on_pay_status? там всего одно действие по условию, т.е. достаточно IF. (г) Что будет если payed = 1 при insert? 3-5 - не выполнены.

Nigota commented 10 months ago

2 (в) - если в bookings будет меняться другая колонка (не payments), то тригер все равно сработает - он вообще срабатывает на любые изменения в bookings. По заданию необходимо отслеживать только колонку payments, за это у меня отвечает строка WHEN NEW.payed = OLD.payed THEN BEGIN END; , ну и у колонки payments может быть 2 состояния (True or False), суммарно надо отслеживать 3 состоя - CASE с этой задачей справляется лучше, чем IF, к тому же CASE удобно использовать в плане масштабируемости условий. Считаю, что целесообразнее использовать CASE

2 (г) - не понял вопроса. INSERT происходит после того как payed уже стала 1

lasbio commented 10 months ago

1 -возвращаемый тип?

2в - в замечании была неточность. Оно относится к триггеру before delete. Использование там case необоснованно, т.к. для проведения действия запрета надо проверять единственное условие payed = 1. Впрочем и для другого триггера можно легко написать все через IF (new <> old) then begin if new = 1 then ... else ... end. Впрочем это дело вкуса для данного триггера.

2г - если пользователь оплатил аренд сразу, то в таблицу booking по INSERT внесена запись с payed = 1. Она в вашу таблицу payments не попадет.

Зачем нужен SELECT в INSERT ... SELECT NEW.bookid, cost_of(memid, facid, slots) FROM bookings WHERE bookings.bookid = NEW.bookid LIMIT 1;

У Вас в триггере и так значения bookid, memid, facid, slots известны и для NEW И для OLD. 3 - процедура должна быть индифферентна относительно параметров, т.е. должна совершать расчет за любой месяц. ЕЕ в качестве демонстрации работоспосjбности надо было применить в июлю. Кроме того, в задании указано "каждого объекта клуба" а у Вас сделано для всех. 4-5 - не сделано

lasbio commented 9 months ago

1 - не поправлено (соответственно ошибки в 2 и 3, где эта функция использована). 2 - в принципе правильно, но:

Nigota commented 9 months ago

Исправил ошибки. Закинул 8 лабу. идею 4 задания я понял (ну я так и делал, просто не дописал функции)

lasbio commented 9 months ago

5 - не выполнено 4 - подход не верный, неявные ошибки. Все существенно проще, чем Вы делаете:

lasbio commented 9 months ago

3 - считает чистый доход, а не окупаемость. окупаемость == период , в течении которого суммарный чистый доход превысит начальную стоимость объекта. 4 - не верно. Функция возвращает не то что задано в задании и не в том формате. Кроме того, зачем использовать "income - maintenancу" в beta если выше уже задано net_income ? И до beta <0 функция никогда не дойдет по условиям выше. 5 - см. 4, нет сравнения