Проектирование и разработка реляционной базы данных “Электронная кулинарная книга”


СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1. ПОСТРОЕНИЕ ИНФОЛОГИЧЕСКОЙ КОНЦЕПТУАЛЬНОЙ МОДЕЛИ
1.1 Анализ предметной области и выявление необходимого набора сущностей
1.2 Обоснование требуемого набора атрибутов для каждой сущности и выделение идентифицирующих атрибутов
1.3 Определение связей между объектами
1.4 Описание полученной модели на языке инфологического проектирования
2. ПОСТРОЕНИЕ СХЕМЫ РЕЛЯЦИОННОЙ БАЗЫ ДАННЫХ
2.1 Построение набора необходимых отношений базы данных
2.2 Задание первичных и внешних ключей определенных отношений

2.3 Приведение отношения БД к третьей нормальной форме
2.4 Определение ограничений целостности для внешних ключей отношений и для отношений в целом
2.5 Графическое представление связей между внешними и первичными ключами
3. СОЗДАНИЕ СПРОЕКТИРОВАННОЙ БАЗЫ ДАННЫХ
4. ЗАПИСЬ ВЫРАЖЕНИЙ, УКАЗАННЫХ В ВАРИАНТЕ ЗАДАНИЯ ТИПОВ ЗАПРОСОВ НА ЯЗЫКЕ SQL
5. ВЫБОР И ОБОСНОВАНИЕ СРЕДСТВ РАЗРАБОТКИ ПРИЛОЖЕНИЯ
6. РЕАЛИЗАЦИЯ ЗАКОНЧЕННОГО ПРИЛОЖЕНИЯ, РАБОТАЮЩЕГО С СОЗДАННОЙ БАЗОЙ ДАННЫХ
6.1 Разработка и построение интерфейса главной и рабочей форм
6.2 Построение главного меню и кнопок панели инструментов
6.3 Выполнение программного кода в среде Microsoft Visual C#
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЕ A – КОНЦЕПТУАЛЬНАЯ СХЕМА БД
ПРИЛОЖЕНИЕ B – СХЕМА РЕЛЯЦИОННОЙ БАЗЫ ДАННЫХ
ПРИЛОЖЕНИЕ Д – ЛИСТИНГ ПРОГРАММЫ

ВВЕДЕНИЕ
база данные электронная книга
Темой данной курсовой работы является «Проектирование и разработка реляционной базы данных «Электронная кулинарная книга».

На сегодняшний день базы данных занимают одно из первых мест среди различных структур хранения данных. База данных является эффективно организованной структурой хранения данных, которая предоставляет пользователю значительные возможности при работе с информацией, находящейся в ней.

В рамках данной курсовой работы была поставлена следующая задача: разделить множество всех рецептов по принадлежности к той или иной национальной кухне (русская, итальянская, европейская, японская), определенному виду блюда (закуска, салат, суп, паста, пицца, горячее, десерт), наличию ингредиентов (рыба, мясо, салат, помидоры и т. д.), основе (рыбная, мясная, овощная), способу приготовления блюда (жареное, вареное, тушеное, печеное). Каждый рецепт имеет своё происхождение, которое также будет храниться в базе данных. Также, организована возможность комментирования рецепта пользователями с запоминанием имени этого пользователя и когда сообщение было оставлено. Предусмотрена возможность отфильтрования рецептов исходя из предпочтений пользователя (по категории блюда, по калорийности, по принадлежности к национальной кухне и т. д.).

Для создания и сопровождения базы данных будет использоваться СУБД Microsoft SQL Server 2012. Для создания клиентского приложения будет использоваться язык программировния C# в среде разработки Microsoft Visual Studio 2012.

1. ПОСТРОЕНИЕ ИНФОЛОГИЧЕСКОЙ
КОНЦЕПТУАЛЬНОЙ МОДЕЛИ

Инфологической моделью данных является описание, которое выполненно с использованием естественного языка, таблиц, математических формул, и других средств, которые понятны людям, работающим над проектированием базы данных.

Цель инфологического моделирования является обеспечение наиболее естественных для человека способов сбора и представления той информации, которую предполагается хранить в создаваемой базе данных.

1.1 Анализ предметной области и выявление необходимого набора сущностей

Перед началом разработки базы данных, необходимо определить основные цели, задачи и правила для решаемой проблемы, после чего приступать к проектированию. Поэтому сформулируем краткое описание поставленной задачи.

Наименование задачи – автоматизация учета рецептов в электронной кулинарной книге, добавление нового рецепта, оценка рецепта, которую выполняет пользователь, так же выбор подходящего для себя рецепта.

Цель работы пользователя – добавлять новый рецепт, оставлять отзывы на рецепты

Цель работы администратора – администрирование приложения

Для построения информационной системы требуется для начала выделить необходимы набор сущностей, которые описывают эту систему. Данный набор должен удовлетворять всем условиям на проектирование системы.

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

Любой рецепт принадлежит какой-либо национальной кухне, поэтому выбелим сущность – кухня.

Так же у каждого рецепта есть своя категория, для этого была выделена сущность – категория.

У любого рецепта есть основа с которой начинается п риготовление блюда, именно для этого была выделена сушность – основа.

Так же у нас есть возможность добавления рецепта из книги, для этого была создана сущность – книга.

Исходя из того что у нас электронная кулинарная книга, было принято решение, что пользователи могут оставлять коментарии о рецепте, именно для этого были созданы сущности – пользователь и отзыв. Любой пользователь может оставлять неограниченное колличество отзывов о рецептах.

Пользователь может подобрать себе рецепт исходя из его предпочтений, например ввести ингридиенты и выбрать подходящий для себя рецепт.

У пользователя есть возможность просмотра ТОП 10 популярных рецептов за текущий месяц, добавлять новый рецепт, просмотрее более полную информацию о данном рецепте.

1.2 Обоснование требуемого набора атрибутов для каждой сущности
и выделение идентифицирующих атрибутов

Атрибут – поименованная характеристика сущности.

Атрибутом сущности является любая деталь, которая служит для уточнения, идентификации, классификации, числовой характеристики или выражения состояния сущности.

Для каждой сущности, выделенной в пункте 1.1. необходимо определить атрибуты.

Сущность – «Recipe»(Рецепт):

Название атрибута по-русски Название атрибута по-английски
1 ID_рецепт Recipe_ID
2 ID_кухня Rec_Cuisine_ID
3 ID_категория Rec_Category_ID
4 ID_способа_приготовления Rec_Coocking_method_ID
5 ID_пользователя Rec_User_ID
6 ID_книги Rec_Book_ID
7 Описание_способа_приготовления Description_cooking_method
8 Название_рецепта Recipe_name
9 Калорийность Caloric_content
10 Выход_блюда Dish_weight
11 ID_основа Rec_Basis_ID
12 ID_автор Rec_Author_ID

Сущность – «Cuisine»(Кухня)

Название атрибута по-русски Название атрибута по-английски
1 ID_кухня Cuisine_ID
2 Название_кухни Cuisine_name

Сущность – «Category»(Категория):

Название атрибута по-русски Название атрибута по-английски
1 ID_категории Category_ID
2 Название_категории Category_name

Сущность – «Cooking_method»(Способ приготовления):

Название атрибута по-русски Название атрибута по-английски
1 ID_способа приготовления Cooking_method_ID
2 Название_способа Method_name

Сущность – «Composition»(Состав):

Название атрибута по-русски Название атрибута по-английски
1 ID_состав Composition_ID
2 ID_ ингредиент Comp_Ingredient_ID
3 ID_рецепт Comp_recipe_ID
4 ID_мера_измерения Comp_Unit_measure_ID
5 ID_состояние Comp_condition_ID
6 Количество Quantity

Сущность – «Condition»(Состояние):

Название атрибута по-русски Название атрибута по-английски
1 ID_состояния Condition_ID
2 Название Condition_name

Сущность – «Unit_measure»(Единица измерения):

Название атрибута по-русски Название атрибута по-английски
1 ID_состояния Condition_ID
2 Название Condition_name

Сущность – «Ingredient»(Ингредиент):

Название атрибута по-русски Название атрибута по-английски
1 ID_состояния Condition_ID
2 Название Condition_name

Сущность – «Reference»(Отзыв):

Название атрибута по-русски Название атрибута по-английски
1 ID_отзыва Reference_ID
2 ID_пользователя Ref_User_ID
3 ID_рецепта Ref_Recipe_ID
4 Сообщение Message
5 Дата Date

Сущность – «User_1»(Пользователь):

Название атрибута по-русски Название атрибута по-английски
1 ID_пользователя User_ID
2 Имя Name
3 Фамилия Surname
4 Логин Login
5 Пароль Password

Сущность – «Book»(Книга):

Название атрибута по-русски Название атрибута по-английски
1 ID_книги Book_ID
2 Название Tittle
3 Автор Author
4 Описание Description

Сущность – «Basis»(Основа):

Название атрибута по-русски Название атрибута по-английски
1 ID_основы Basis_ID
2 Название Basis_name

1.3 Определение связей между объектами

Следующим этапом в проектировании инфологической модели является установление связи между сущностями.

Связью является ассоциирование двух или более сущностей. Было бы очень просто реализовать структуру базы данных, занимающейся хранением несвязных данных. Но в данном случае одной из основных задач является, например, поиск одних сущностей по значениям других. Для этого необходимо установить связи между таблицами, описанными в предыдущем пункте.

Этот процесс представлен на рис. 1.1.

Рисунок 1.1 – Концептуальная схема базы данных

Проследить отношения, в которых состоят таблицы базы данных можно по схеме, изображенной на в приложении A на рис. А.1.

1.4 Описание полученной модели на языке инфологического проектирования

Проектирование инфологической модели предметной области – частично формализованное описание объектов предметной области в терминах некоторой семантической модели, например, в терминах ER-модели (англ. entity-relationship model). Это концептуальная модель, служащая для упрощения задачи проектирования базы.

Данная модель предлагает инструменты моделирования данных для представления логических объектов (сущностей) и их отношений (связей) в структуре базы данных.

Достоинство концептуальной модели данных заключается в том, что она не зависит от конкретной системы управления базами данных, или платформы, которая используется при реализации БД.

На основе проведенного проектирования, в частности на основе инфологической схемы, приведенной на рисунке 1.1, получим ER-диаграмму базы данных кулинарной книги, представленную в Приложении A

2. ПОСТРОЕНИЕ СХЕМЫ РЕЛЯЦИОННОЙ
БАЗЫ ДАННЫХ

2.1 Построение набора необходимых отношений базы данных

Для построения схемы реляционной базы данных необходимо определить совокупность отношений, составляющих базу данных. Эта совокупность отношений будет содержать всю информацию, которая должна храниться в базе данных.

На концептуальной модели, которая была получена в предыдущем пункте, можно определить набор необходимых отношений базы данных.

На рисунке 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. Это обусловлено тем, что, данная СУБД имеет большую функциональность и развитую инфраструктуру для интеграции баз данных в пользовательские приложения.

В создаваемой базе данных будут использоваться следующие типы данных:

INT – Целочисленный тип. Размер – 4 байта

CHAR – Строковый тип переменной длины

DATE – Тип, определяющий дату.

TEXT – Текстовый тип

Опишем все таблицы, которые будут созданы в базе данных.

Таблица 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 Дата создания отзыва

Таблица Composition_11 служит для хранения информации об составе блюда. Ее структура приведена в таблице 3.10.

Таблица 3.10 – Характеристика атрибутов таблицы Composition_11

Имя атрибута Тип Описание
Composition_ID INT Идентификатор записи. Ключевое поле
Comp_Ingridient_ID INT Идентификатор ингридиента
Comp_recipe_ID INT Идентификатор рецепта
Comp_Unit_measure_ID INT Идентификатор единицы измерения
Comp_condition_ID DATE Идентификатор состояния
Quantity CHAR(10) Колличество

Таблица Ingridient содержит сведения об ингридиентах, необходимых для приготовления блюда. Структура приведена в таблице 3.11.

Таблица 3.11 – Характеристика атрибутов таблицы Ingridient

Имя атрибута Тип Описание
Ingridient_ID INT Идентификатор ингридиента
Ingridient_name CHAR(50) Название ингридиента

Таблица Unit_measure содержит сведения об единице измерения блюда. Структура приведена в таблице 3.12.

Таблица 3.12 – Характеристика атрибутов таблицы Account

Имя атрибута Тип Описание
Unit_measure_ID INT Идентификатор единицы измерения
Unit_measure_name CHAR(50) Название единицы измерения

Таблица Condition хранит информацию о состоянии блюда. Ее структура приведена в таблице 3.13.

Таблица 3.13 – Характеристика атрибутов таблицы Condition

Имя атрибута Тип Описание
Condition_ID INT Идентификатор состояния
Condition_name CHAR(50) Название состояния

4. ЗАПИСЬ ВЫРАЖЕНИЙ, УКАЗАННЫХ В ВАРИАНТЕ ЗАДАНИЯ ТИПОВ ЗАПРОСОВ НА ЯЗЫКЕ SQL

Процедура проверки существующего логина, при авторизации пользователя

CREATE PROCEDURE CheckLogin

@par char(20)

AS

BEGIN

DECLARE @a int;

SELECT @a = COUNT([Login]) FROM User_1

WHERE [Login] = @par

GROUP BY [Login]

IF(@a >0)

BEGIN

SELECT ‘Логин занят’;

END

ELSE

BEGIN

SELECT ‘Логин свободен’;

END

END

Триггер на вставку в таблицу User_1 на преобразование первой буквы фамилии, имени к верхнему регистру

CREATE TRIGGER Tr_letters

ON User_1 FOR INSERT

AS

BEGIN

update User_1

set Surname = STUFF(Lower(i. Surname),1,1,Upper(LEFT(i. Surname,1)))

from User_1 i

join inserted t on t. Surname = i. Surname

update User_1

set Name = STUFF(Lower(i. Name),1,1,Upper(LEFT(i. Name,1)))

from User_1 i

join inserted t on t. Name = i. Name

END

Процедура добавления нового отзыва о рецепте

CREATE PROCEDURE NewOtzivAd

@Mess char(250),

@CurrDate char(10),

@CurrRID char(20),

@CurrRUID char(20),

@CurrID int

AS

BEGIN

INSERT INTO Reference_1([Message],[Date],[Ref_Recipe_ID],[Ref_User_ID]) VALUES (@Mess, @CurrDate,@CurrRID,@CurrRUID)

SELECT [Message],[Date],[Login] FROM Reference_1,User_1,Recipe

WHERE (Ref_User_ID = [User_ID]) AND (Ref_Recipe_ID = Recipe_ID)

AND (Recipe_ID = @CurrID)

END

Процедура подбора блюда по введенным ингредиентам

CREATE PROCEDURE ViewIngridientRecipes

@p1 char(20),

@p2 char(20),

@p3 char(20)

AS

BEGIN

SELECT Recipe_name FROM Composition_11,Ingridient, Recipe

WHERE (Comp_Ingridient_ID = Ingridient_ID) AND

(Ingridient_name = @p1 OR Ingridient_name = @p2 OR Ingridient_name = @p3)

AND (Recipe_ID = Comp_recipe_ID)

GROUP BY Recipe_name

END

Процедура вывода ТОП 10 активнейших пользователей за введенные интервалы времени

ALTER PROCEDURE ViewRecipeActivity

@par1 char(10),

@par2 char(10)

AS

— ТОП 10 САМЫХ популярных блю за определенный промежуток времени

BEGIN

SELECT TOP (10) [Recipe_name],COUNT([Reference_ID]) AS Popularity FROM Reference_1,Recipe

WHERE ([Date] BETWEEN @par1 AND @par2) AND (Ref_Recipe_ID = Recipe_ID)

GROUP BY [Recipe_name]

ORDER BY Popularity DESC

Тригер на проверку ввода одинакового логина при регистрации,
CREATE TRIGGER Check_LOG

on User_1 for insert

as

begin

if exists(Select * from User_1,inserted where User_1.[User_ID]<>inserted.[User_ID]

and User_1.[Login]=inserted.[Login])

begin

print ‘ЛОГИН уже существует’

rollback

end

end

Триггер на вставку в таблицу Reference_1. Запрещается вставка даты больше чем текущая.

CREATE TRIGGER Check_referenseDate

ON Reference_1 FOR INSERT, UPDATE

AS

BEGIN

Declare @din date

set @din=(SELECT CONVERT (date, GETDATE()))

IF EXISTS (Select [Date] from Reference_1 where [Date]> @din)

begin

PRINT ‘Дата отзыва не может быть больше текущей даты’

Rollback

end

END

Тригер на проверку ввода одинакового рецепта

CREATE TRIGGER CHECK_RECIPE_NAME

ON Recipe FOR INSERT

AS

BEGIN

IF EXISTS(SELECT * FROM Recipe, INSERTED WHERE Recipe.[Recipe_ID]<>INSERTED.[Recipe_ID]

AND Recipe. Recipe_name=INSERTED. Recipe_name AND Recipe. Rec_Cuisine_ID = INSERTED. Rec_Cuisine_ID

AND Recipe. Rec_Category_ID = INSERTED. Rec_Category_ID AND Recipe. Rec_Book_ID = INSERTED. Rec_Book_ID

AND Recipe. Rec_Basis_ID = inserted. Rec_Basis_ID)

BEGIN

PRINT ‘Такой рецепт уже существует’

ROLLBACK

END

END

Процедура вывода ТОП 10 популярных рецептов за введенные интервалы времени

ALTER PROCEDURE ViewRecipeActivity

@par1 char(10),

@par2 char(10)

AS

BEGIN

SELECT TOP (10) [Recipe_name],COUNT([Reference_ID]) AS Popularity FROM Reference_1,Recipe

WHERE ([Date] BETWEEN @par1 AND @par2) AND (Ref_Recipe_ID = Recipe_ID)

GROUP BY [Recipe_name]

ORDER BY Popularity DESC

Процедура фильтрации рецепта по калорийности

CREATE PROCEDURE CalorFilter_1

@a1 int

–@a2 int

–@typeproc int

AS

BEGIN

SELECT Recipe_ID, Recipe_name, Cuisine_name, Category_name, Tittle,[Author],Caloric_content, Dish_weight,[Login]

FROM Recipe, Cuisine, Category, Book, User_1

WHERE (Rec_Cuisine_ID = Cuisine_ID) AND (Rec_Category_ID = Category_ID)

AND (Rec_Book_ID = Book_ID) AND (Rec_User_ID = [User_ID])

AND (Caloric_content > @a1)

END

Процедура вывода всех отзывов для конкретного рецепта

CREATE PROCEDURE [dbo].[Otzivi]

@par int

AS

BEGIN

SELECT [Message],[Date],[Login] FROM Reference_1,User_1,Recipe

WHERE (Ref_User_ID = [User_ID])

AND (Ref_Recipe_ID = Recipe_ID)

AND (Recipe_ID = @par)

END

5. ВЫБОР И ОБОСНОВАНИЕ СРЕДСТВ РАЗРАБОТКИ ПРИЛОЖЕНИЯ

Для реализации поставленной задачи была выбрана СУБД MS SQL Server 2012. Данная СУБД является одной из популярных систем управления баз данных. В ней применяются новейшие разработки и последние достижения в области проектирования, построения и обслуживания баз данных. Основной используемый язык запросов — Transact-SQL, создан совместно Microsoft и Sybase. Transact-SQL является реализацией стандарта ANSI/ISO по структурированному языку запросов (SQL) с расширениями. Используется для работы с базами данных размером от персональных до крупных баз данных масштаба предприятия; конкурирует с другими СУБД в этом сегменте рынка.

Данная СУБД полностью реализовывает все аспекты реляционной модели данных и позволяет нам с помощью встроенных функций поддерживать ссылочную целостность данных. Так же MS SQL Server стал де факто стандартом источника данных для всех решений Microsoft, что облегчает его интеграцию с различными программными пакетами.

Для создания приложения используется среда разработки Microsoft Visual Studio 2012, а языком написания приложения был выбран – C#. Был выбран именно этот язык по следующим причинам:

Претендует на подлинную объектную ориентированность (а всякая языковая сущность претендует на то, чтобы быть объектом);

Призван практически реализовать компонентно-ориентированный подход к программированию, который способствует меньшей машинно-архитектурной зависимости результирующего программного кода, большей гибкости, переносимости и легкости повторного использования как программ целиком так и ее фрагментов;

Изначальная ориентация на безопасность кода (что особенно заметно в сравнении с языками C и C++);

Расширенная поддержка событийно-ориентированного программирования;

Идеальная совместимости с базами данных на SQL Server 2012.

6. РЕАЛИЗАЦИЯ ЗАКОНЧЕННОГО ПРИЛОЖЕНИЯ, РАБОТАЮЩЕГО С СОЗДАННОЙ БАЗОЙ ДАННЫХ

6.1 Разработка и построение интерфейса главной и рабочей форм

Главная форма приложения является объектом класса Form, наследуемый от класса Windows. Forms, определенного в. NET Framework. Создание всех компонентов формы, в частности главного меню, управляющих элементов, окон сообщений, диалогов настроек и выбора файлов, панели с закладками и др., происходит в методе по мере их выpова, соответствующими им конструкторами.

Все основные таблицы для представления данных были выполнены в виде DataGrid, что упрощает понимание и просмотр информации, т. к. она представляется в табличном виде.

Все основные формы и виды приложения выполнены в одном окне на основе страничного интерфейса. Дочерние (вспомогательные) формы выполнены в виде диалоговых окон. Основной упор при проектировании интерфейса приложения был сделан на привлекательность и понятность для конечного пользователя.

При проектировании приложения были учтены все возможные случаи некорректной работы программы, поэтому большинство нештатных ситуаций сопровождается оповещениями с описанием проблемы.

6.2 Построение главного меню и кнопок панели инструментов

В данном приложении существует 2 роли: администратор, и пользователь. Для удобства, все манипуляции с базой буду осуществляться на одной форме, так мы избежим нагроможденности окон. После запуска программы все типы пользователей видят поля для ввода ip адреса сервера на котором находится база (по умолчанию выставляется local) и поле для ввода каталога инициализации (по умолчанию Kulinarnaya_kniga). После нажатия кнопки «Открыть книгу» пользователей перекидывает на форму авторизации. После ввода данных у нас отображается главное окно, в котором показываются все рецепти и средства необходимые для работы с книгой.

Для пользователя доступны следующие кнопки: «Добавить рецепт» , «Подробнее о рецепте», «Подбор рецепта по ингридиентам», «Топ 10 активных пользователей», «Топ 20 популярных рецептов». Нажав на кнопку «Подробнее о рецепте» у пользователя показывается подробная информация о рецепте: Ингридиенты, способ приготовления, отзывы, состав. Нажав на кнопку «Подбор рецепта по ингридиентам» пользователь должен будет в новом окне ввести ингридиенты и по этим ингредиентам ему выведутся те рецепты в которых присутсвуют данные ингридиенты. Так же пользователь может отфильтровать рецепты по любой категории, кухне, калорийности и подобрать понравившийся.

Для администратора доступны следующие кнопки: «Добавить рецепт» , «Удалить рецепт», «Редактировать рецепт». Нажав на любую из кнопок администратору выведется новое окно в котором он сможет добавить, удалить или отредактировать рецепт.

Просмотреть интерфейс можно в Приложении С.

6.3 Выполнение программного кода в среде Microsoft Visual C#

Опишем работу приложения с базой данных. Подключение к базе данных осуществляется следующим образом:

Листинг 6.3.1 Подключение к серверу

homeconnect = new SqlConnection(@”Data Source=” + textBox1.Text + “;Initial Catalog=” + textBox2.Text + “;Integrated Security=True;”);

if (cn. State == ConnectionState. Closed

{

homeconnect. Open();

}

После подключения для осуществления запросов необходимо проверить достоверность базы данных, если проверка проходит успешно, то будут разблокированы возможности по работе с базой. Пример вызова процедуры добавления С# отображен в листинге 6.3.2.

Листинг 6.3.2 Пример вызова процедуры SQL

frm1.homecommand = frm1.homeconnect. CreateCommand();

frm1.homecommand. CommandType = CommandType. Text;

frm1.homecommand. CommandText = “EXEC AddRecipe ” + textBox4.Text + “, ” + richTextBox1.Text + “, ” + typein_4 + “, ” + typein_3 + “, ” + typein_2 + “, 1,” + textBox1.Text + “, ” + textBox5.Text;

frm1.homeconnect. Open();

frm1.homedatareader = frm1.homecommand. ExecuteReader();

ReloadMainPage();

Функция ReloadMainPage() из вышеприведенного кода – обновляет данные в dataGridView и выводит данные на форму. Код функции отображен в листинге 6.3.3.

Листинг 6.3.3 Вывод результата запроса в datagridView

SqlDataAdapter sqlda = new SqlDataAdapter();

DataTable DT = new DataTable();

DataSet DS = new DataSet();

frm1.homecommand = frm1.homeconnect. CreateCommand();

frm1.homecommand. CommandType = CommandType. Text;

frm1.homecommand. CommandText = “EXEC ViewMainPage”;

frm1.homeconnect. Open();

sqlda. SelectCommand = frm1.homecommand;

sqlda. Fill(DS);

DT = DS. Tables[0];

dataGridView1.DataSource = DT;

GridOptions();

frm1.homeconnect. Close();

ЗАКЛЮЧЕНИЕ

В результате выполнения данной курсовой работы была разработана и создана база данных, содержащая кулинарные рецепты. Разработанная база данных удовлетворяет всем требованиям, предъявленным в задании, и позволяет без проблем хранить и извлекать требуемую информацию.

Разработанная система реагирует на ошибочный ввод данных (например, некорректный ввод даты и количества ингридиентов, проверка на пустоту вводимых значений) а также способна определять возникающие ошибки и уведомлять об этом пользователя, чтобы в любой момент он знал из-за чего или почему произошла ошибка, и устранил её. Данная система поредоставляет перечень функций. Для администратора: добавление нового рецепта, редактирование рецепта, удаление рецепта. Для пользователя: просмотр побробных сведений о рецепте, а также пользователь может оставлять отзыв о блюде, у пользователя есть возможность просмотреть топ 10 популярнейших рецептов, топ 10 активнейших пользователей, так же он может отфильтровать рецепты по любой категории, кухне, калорийности, предусмотрена возможность подбора рецепта по ингридиентам.

В процессе выполнения данной курсовой работы были закреплены навыки в программировании на языке C#, проектировании баз данных и реализации их в СУБД MS SQL Server 2012.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Шилдт Г. Полный справочник по SQL.: Пер. с англ. – М.: ООО “И. Д. Вильямс”, 2004. – 752 c.: ил.

Хернандес М., Вьескас Д. SQL-запросы. Практическое руководство.: Пер. с англ. – М.: Лори, 2003. – 473 c.: ил.

Коннолли Т., Бегг К., Базы данных. Проектирование, реализация и сопровождение. Теория и практика.: Пер. с англ. – М.: Вильямс, 2003. – 1500 с.: ил.

ПРИЛОЖЕНИЕ A

КОНЦЕПТУАЛЬНАЯ СХЕМА БД

Рисунок A.1 – Инфологическая схема проектируемой базы данных

Рисунок A.2 – ER-диаграмма проектируемой базы данных

ПРИЛОЖЕНИЕ B

СХЕМА РЕЛЯЦИОННОЙ БАЗЫ ДАННЫХ

Рисунок B.1 – Схема реляционной базы данных

ПРИЛОЖЕНИЕ C

ГЛАВНАЯ И РАБОЧИЕ ФОРМЫ ПРИЛОЖЕНИЯ

Рисунок C.1 – Стартовая страница авторизація

Рисунок C.2 – Авторизация пользователя

Рисунок C.3 – Регистрация пользователя

Рисунок C.4 – Вывод рецептов

Рисунок C.5 – Вывод топ 10 самых активных пользователей

Рисунок C.6 – Вывод подробного описания о рецепте

Рисунок C.7 – Подбор рецептов по ингридиентам

Просмотров: 112