Автор: Пользователь скрыл имя, 07 Января 2015 в 18:58, курсовая работа
В рамках данной курсовой работы была поставлена следующая задача: разделить множество всех рецептов по принадлежности к той или иной национальной кухне (русская, итальянская, европейская, японская), определенному виду блюда (закуска, салат, суп, паста, пицца, горячее, десерт), наличию ингредиентов (рыба, мясо, салат, помидоры и т.д.), основе (рыбная, мясная, овощная), способу приготовления блюда (жареное, вареное, тушеное, печеное). Каждый рецепт имеет своё происхождение, которое также будет храниться в базе данных. Также, организована возможность комментирования рецепта пользователями с запоминанием имени этого пользователя и когда сообщение было оставлено.
На рисунке 2.1 представлены отношения для базы данных Электронной кулинарной книги.
Рисунок 2.1 – Набор необходимых отношений базы данных
2.2 Задание первичных и внешних ключей
определенных отношений
Ключ – это минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности. Минимальность означает, что исключение из набора любого атрибута не позволяет идентифицировать сущность по оставшимся атрибутам. Каждое отношение должно обладать хотя бы одним ключом. Для удобства первичные ключи будут иметь постфикс ID, вторичные – Rec,Ref,Comp. В таблице 2.1 определены первичные и внешние ключи для отношений.
Таблица 2.1 – Первичные и внешние ключи отношений
№ п/п |
Название таблицы |
Первичный ключ |
Внешние ключи |
Recipe |
Recipe_ID |
Rec_Autor_ID Rec_Book_ID Rec_Category_ID Rec_Cooking_method_ID Rec_Cuisine_ID Rec_User_ID | |
Book |
Book_ID |
||
Author |
Author_ID |
||
Cuisine |
Cuisine_ID |
||
Cooking_method |
Cooking_method_ID |
||
Category |
Category_ID |
||
User_1 |
User_ID |
||
Reference_1 |
Reference_ID |
Ref_Recipe_ID Ref_User_ID | |
Composition |
Composition_ID |
Comp_Recipe_ID Comp_Ingridient_ID Comp_Condition_ID Comp_Unit_measure_ID | |
Ingridient |
Ingridient_ID |
||
Condition |
Condition_ID |
||
Unit_measure |
Unit_measure _ID |
||
2.3 Приведение отношения БД к третьей нормальной форме
Процесс преобразования базы данных к виду, отвечающему нормальным формам, называется нормализацией.
Нормализация необходима для того, чтобы привести структуру базы данных к виду, в которой достигалась бы минимальная избыточность. Конечной целью нормализации является уменьшение потенциальной противоречивости хранимой в БД информации.
Так как все атрибуты наших отношений атомарны, а каждое отношение имеет первичный ключ, то это означает, что отношения базы находятся в первой нормальной форме (1НФ).
Так как зависимости неключевых атрибутов от части составного ключа отсутствуют (все ключи в вышеописанных отношениях несоставные), а отношения базы находятся в первой нормальной форме, то можно утверждать, что отношения базы удовлетворяют требованиям второй нормальной формы (2НФ).
Так как в отношениях базы отсутствуют зависимости неключевых атрибутов от других неключевых атрибутов, а присутствие второй нормальной формы указано выше, можно сказать, что отношения базы находятся в третьей нормальной форме (3НФ).
Таким образом, отношения Базы Данных находятся в 3 Нормальной Форме.
2.4 Определение ограничений целостности для внешних
ключей отношений и для отношений в целом
Ограничение целостности отношений заключается в том, что в любом отношении должны отсутствовать записи с одним и тем же значением первичного ключа. Конкретно требование состоит в том, что любая запись любого отношения должна быть отличной от любой другой записи этого отношения. Это требование автоматически удовлетворяется, если в системе не нарушаются базовые свойства отношений.
Ограничение целостности подразумевает, что в любом отношении не должны появляться записи с одним и тем же значением первичного ключа. То есть любая запись отношения должна быть отлична от любой другой записи этого же отношения. В проектируемой таблице все сущности будут иметь первичный ключ. Он необходим для её однозначной идентификации. Например, на клиентской стороне, также будет использоваться при удалении, добавлении или обновлении записи.
Для автоматического обновления связанных полей (удаления записей) при обновлении (удалении) в главной таблице, следует устанавливать обеспечение целостности данных и каскадное обновление связанных полей (каскадное удаление связанных записей).
Для удовлетворения требования ограничения целостности для внешних ключей отношений и для отношений в целом необходимо, чтобы выполнялось соответствие между типами вводимых данных и типами столбцов в таблицах, а так же чтобы были заполнены все обязательные поля в таблицах, т.е. те поля которые не могут содержать значения NULL.
Система управления базами данных не может контролировать правильность каждого отдельного значения, вводимого в базу данных. Для этого существует ряд средств, помогающих разработчику минимизировать возможность нарушения целостности данных базы: триггеры, проверки («check»), уникальность («unique») и др.
Ограничения в базе данных электронная кулинарная книга представлены в Таблице 2.4.1
Таблица 2.4.1
№ п/п |
Название таблицы |
Ограничение с указанием типа |
Описание |
User_1 |
TRIGGER Check_Log |
Невозможно добавить пользователя с одинаковым логином | |
CHECK Check_Login |
Проверка существования логина при авторизации | ||
2 |
Recipe |
TRIGGER Check_Recipe_name |
Невозможно добавить рецепт с одинаковым одновременно именем калорийностью, категорией, кухней. |
3 |
Reference |
TRIGGER Check_Referencedate |
Дата оставления отзыва не может превышать текущую дату. |
2.5 Графическое представление связей между
внешними и первичными ключами
После выполнения нормализации, выявления первичных и внешних ключей, определения связей между таблицами, была получена схема реляционной базы данных, представленная в приложении В.На ней изображаются все отношения базы данных, а также связей между внешними и первичными ключами.
3 СОЗДАНИЕ СПРОЕКТИРОВАННОЙ БАЗЫ ДАННЫХ
Для реализации спроектированной базы данных была выбрана система управления базами данных MS SQL Server 2012. Это обусловлено тем, что, данная СУБД имеет большую функциональность и развитую инфраструктуру для интеграции баз данных в пользовательские приложения.
В создаваемой базе данных будут использоваться следующие типы данных:
Опишем все таблицы, которые будут созданы в базе данных.
Таблица Recipe содержит список наименований рецепта, которые существуют в базе. Структура данной таблицы приведена в таблице 3.1.
Таблица 3.1 – Характеристика атрибутов таблицы Recipe
Имя атрибута |
Тип |
Описание | ||||
Recipe_ID |
INT |
Идентификатор рецепта. Ключевой атрибут. | ||||
Rec_Cuisine_ID |
INT |
Идентификатор кухни | ||||
Rec_Cooking_method_ID |
INT |
Идентификатор метода приготовления | ||||
Rec_User_ID |
INT |
Идентификатор пользователя | ||||
Rec_Book_ID |
INT |
Идентификатор книги | ||||
Description_cooking_method |
TEXT |
Описание способа приготовления | ||||
Recipe_name |
CHAR(50) |
Имя рецепта | ||||
Caloric_content |
CHAR(15) |
Калорийность блюда | ||||
Dish_weight |
CHAR(15) |
Выход блюда | ||||
Rec_Basis_ID |
INT |
Идентификатор основы | ||||
Rec_Author_ID |
INT |
Идентификатор автора | ||||
Rec_Category_ID |
INT |
Идентификатор категории |
Таблица Cuisine содержит информацию о национальности кухни рецепта. Ее структура приведена в таблице 3.2.
Таблица 3.2 – Характеристика атрибутов таблицы Cuisine
Имя атрибута |
Тип |
Описание |
Cuisine_ID |
INT |
Ключевой атрибут |
Cuisine_name |
CHAR(20) |
Название типа кухни |
Таблица Cooking_method содержит информацию о методе приготовления блюда. Ее структура приведена в таблице 3.3.
Таблица 3.3 – Характеристика атрибутов таблицы Cooking_method
Имя атрибута |
Тип |
Описание |
Cooking_method_ID |
INT |
Ключевой атрибут |
Method_name |
CHAR(50) |
Название метода приготовления блюда |
Таблица User_1 содержит информацию о пользователях. Структура приведена в таблице 3.4.
Таблица 3.4 – Характеристика атрибутов таблицы User_1
Имя атрибута |
Тип |
Описание |
User_ID |
INT |
Идентификатор пользователя. Ключевой атрибут |
Name |
CHAR(20) |
Имя пользователя |
Surname |
CHAR(20) |
Фамилия пользователя |
Login |
CHAR(20) |
Логин пользователя |
Password |
CHAR(20) |
Пароль |
Таблица Book содержит информацию о книгах, из которых брались данные рецепты. Структура приведена в таблице 3.5.
Таблица 3.5 – Характеристика атрибутов таблицы Book
Имя атрибута |
Тип |
Описание |
Book_ID |
INT |
Идентификатор книги. Ключевой атрибут |
Tittle |
CHAR(50) |
Название книги |
Author |
CHAR(50) |
Автор данной книги |
Description |
TEXT |
Краткое описание книги |
Таблица Basis содержит информацию об основе из которой делается данное блюдо. Структура приведена в таблице 3.6.
Таблица 3.6 – Характеристика атрибутов таблицы Basis
Имя атрибута |
Тип |
Описание |
Basis_ID |
INT |
Идентификатор основы. Ключевой атрибут |
Basis_name |
CHAR(50) |
Название основы для блюда |
Таблица Author необходима для того чтобы узнать, блюдо добавлено из книги или пользователем. Структура приведена в таблице 3.7.
Таблица 3.7 – Характеристика атрибутов таблицы Author
Имя атрибута |
Тип |
Описание |
Author_ID |
INT |
Идентификатор автора. Ключевой атрибут |
Flag |
INT |
Флаг для проверки добавления рецепта пользователем или из книги |
Таблица Category служит для хранения информации о категории блюда. Ее структура приведена в таблице 3.8.
Таблица 3.8 – Характеристика атрибутов таблицы Category
Имя атрибута |
Тип |
Описание |
Category_ID |
INT |
Идентификатор категории. Ключевой атрибут |
Category_name |
CHAR(20) |
Название категории блюда |
Таблица Reference_1 служит для хранения данных об отзывах о бллюдах. Ее структура приведена в таблице 3.9.
Таблица 3.9 – Характеристика атрибутов таблицы Reference_1
Имя атрибута |
Тип |
Описание |
Reference_ID |
INT |
Идентификатор записи |
Ref_User_ID |
INT |
Идентификатор пользователя |
Ref_Recipe_ID |
INT |
Идентификатор рецепта |
Message |
CHAR(250) |
Отзыв о блюде |
Date |
DATE |
Дата создания отзыва |