Информационная система "Книга рецептов"
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
зическая модель БД:
Построенная таким образом база данных имеет третью нормальную форму.
Поддержание целостности системы.
В системе должны поддерживаться следующие правила:
а) Для продукта: при попытке удаления записи таблицы продукты ИС проверяет, есть ли в БД данные о рецептах, содержащих этот продукт. Если такие рецепты находятся, то система выдает сообщение: Такое удаление невозможно, так как есть рецепты, для осуществления которых необходим этот продукт. И действительно, если мы удалим данные об этом продукте, рецепты, ссылающиеся на него, станут бесполезными.
При изменении записи о продуктах необходимо помнить, что изменять коды продуктов нельзя - это уникальный атрибут каждого продукта. Если изменим код, то, по сути, мы удалим данные об одном продукте и заменим их данными о другом. Поэтому если пользователь попробует изменить код продукта, то система выдаст ему сообщение вида: Код продукта менять нельзя; он должен совпадать с кодом продукта в каталоге продуктов. Но нулевых кодов у продукта также не может быть. Поэтому если пользователь захочет изменить код, который был введен нулевым, то система позволит ему это сделать.
Если пользователь не изменит нулевой код в ходе обновления записи, то система запретит такое обновление: Код продукта не может быть нулевым.
б) Для блюда: записей в таблице рецепты без соответствующих записей в таблице блюда быть не должно, так как рецепт пишется именно для блюда. Поэтому если пользователь захочет удалить из БД данные о блюде, ИС попросит его сначала удалить соответствующие данные из таблицы рецепты: В БД хранятся рецепт для этого блюда. Данные о блюде могут быть удалены только после удаления соответствующего рецепта.
Как и в случае с продуктами, коды блюд нельзя изменять. Поэтому пользователь, делая изменения в таблице блюда, не должен менять код иначе это будет совершенно новое блюдо. ИС выдаст ошибку с объяснением: Код блюда менять нельзя; он должен совпадать с кодом блюда в каталоге блюд. Но аналогично ситуации с продуктом замена нулевого кода позволяется, но оставить нулевой код нулевым нельзя.
в) Для рецепта: При внесении измененной информации в таблицу рецепты возможны две проблемы. Первое в состав рецепта включили продукт, о котором нет информации в БД. В таком случае система предложит пользователю следующее: Данных о таком продукте нет в БД. Внесите, пожалуйста, сначала информацию в таблицу продукты. Второе пользователь отнес измененный рецепт к блюду, о котором нет данных в системе. ИС поступит аналогично предыдущему случаю: Данных о таком блюде нет в БД. Внесите, пожалуйста, сначала информацию в таблицу блюда.
Приложения
1) Для продуктов:
а) Триггер на удаление записи таблицы продукты.
TRIGGER PROCEDURE FOR DELETE OF Product.
IF CAN-FIND(FIRST Recipe WHERE
Recipe.prod_code = Product.prod_code)
THEN DO:
MESSAGE Такое удаление не возможно, так как есть рецепты, для осуществления которых необходим этот продукт..
RETURN ERROR.
END.
б) Триггер на изменение записи таблицы продукты.
TRIGGER PROCEDURE FOR WRITE OF Product
NEW inserted OLD deleted.
0AND">IF deleted.prod_code <> 0 AND
inserted.prod_code">deleted.prod_code <> inserted.prod_code
THEN DO:
MESSAGE "Код продукта менять нельзя; он должен совпадать с кодом продукта в каталоге продуктов."
RETURN ERROR.
END.
IF inserted.prod_code = 0
THEN DO:
ESSAGE "Код продукта не может быть нулевым."
RETURN ERROR.
END.
2) Для блюд:
а) Триггер на удаления записи таблицы блюда.
TRIGGER PROCEDURE FOR DELETE OF Dish.
IF CAN-FIND(FIRST Recipe WHERE
Recipe.dish_code = Dish.dish_code)
THEN DO:
MESSAGE В БД хранится рецепт для этого блюда. Данные о блюде могут быть удалены только после удаления соответствующего рецепта..
RETURN ERROR.
END.
б) Триггер на изменение записи таблицы блюда.
TRIGGER PROCEDURE FOR WRITE OF Dish
NEW inserted OLD deleted.
0AND">IF deleted.dish_code <> 0 AND
inserted.dish_code">deleted.dish_code <> inserted.dish_code
THEN DO:
MESSAGE "Код блюда менять нельзя; он должен совпадать с кодом блюда в каталоге блюд."
RETURN ERROR.
END.
IF inserted.dish_code = 0
THEN DO:
MESSAGE "Код блюда не может быть нулевым.".
RETURN ERROR.
END.
3) Для рецептов.
а) Триггер на изменение записи таблицы рецепты.
TRIGGER PROCEDURE FOR WRITE OF Recipe
NEW inserted OLD deleted.
IF NOT(CAN-FIND(FIRST Dish WHERE
inserted.dish_code = Dish.dish_code))
THEN DO:
MESSAGE Данных о таком блюде нет в БД. Внесите, пожалуйста, сначала информацию в таблицу блюда..
RETURN ERROR.
END.
IF NOT(CAN-FIND(FIRST Product WHERE
inserted.prod_code = Product.prod_code))
THEN DO:
MESSAGE Данных о таком продукте нет в БД. Внесите, пожалуйста, сначала информацию в таблицу продукты.
RETURN ERROR.
END.
Отчёт
Table Name Description
----------------------------------------------------------------------------
Dish
Product
Recipe
=========================================================================
============================= Table: Dish ===============================
Table Flags: "f" = frozen, "s" = a SQL table
Table Dump Table Field Index Table
Name Name Flags Count Count Label
----------------------------- -------- ----- ----- ----- -------------------
Dish Dish 4 1 ?
Storage Area: N/A
Trigger Event Trigger Procedure Overridable? Check CRC?
------------- -------------------- ------------ ---------
DELETE D_Dish.p no no
WRITE W_Dish.p no no
============================= FIELD SUMMARY =============================
============================= Table: Dish ===============================
Flags: iew component
Order Field Name Data Type Flags Format Initial
----- ------------------------- ----------- ----- --------------- ----------
10 dish_code inte i ->,>>>,>>9 0
20 dish_name char X(18)
30 level inte ->,>>>,>>9 0