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


СОДЕРЖАНИЕ

ВВЕДЕНИЕ

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

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

ПРИЛОЖЕНИЕ D

ЛИСТИНГ ПРОГРАММЫ

ВВЕДЕНИЕ

база данные электронная книга

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

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

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

Для создания и сопровождения базы данных будет использоваться СУБД 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 — Подбор рецептов по ингридиентам

Если вы думаете скопировать часть этой работы в свою, то имейте ввиду, что этим вы только снизите уникальность своей работы! Если вы хотите получить уникальную курсовую работу, то вам нужно либо написать её своими словами, либо заказать её написание опытному автору:
УЗНАТЬ СТОИМОСТЬ ИЛИ ЗАКАЗАТЬ »