Проектирование и разработка реляционной базы данных "Электронная кулинарная книга"
Обоснование требуемого набора атрибутов для каждой сущности. Описание полученной модели на языке инфологического проектирования. Графическое представление связей между внешними и первичными ключами. Разработка и построение интерфейса главной формы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 08.01.2015 |
Размер файла | 2,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
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 - Подбор рецептов по ингридиентам
Размещено на Allbest.ru
Подобные документы
Требования, предъявляемые к базе данных "Публикации в СМИ". Выбор инструментальных средств для разработки. Проектирование базы данных: выявление необходимого набора сущностей, обоснование требуемого набора атрибутов, определение связей между объектами.
курсовая работа [1,2 M], добавлен 18.04.2014Цель инфологического моделирования предметной области. Источники данных, базы данных и система управления, разработка модели. Принципы проектирования базы данных, концептуальная, логическая, материальная разработка. Типы сущностей, атрибутов и связей.
курсовая работа [188,6 K], добавлен 15.07.2012Описание предметной области, определение функциональных требований к системе и построение диаграммы потока данных. Построение модели "сущность-связь", описание сущностей и атрибутов модели. Построение реляционной базы данных и описание ее таблицы.
курсовая работа [624,5 K], добавлен 30.05.2019Разработка базы данных для компании, занимающейся авиагрузоперевозками, снабженной средствами идентификации пользователей. Описание ее предметной области и функций. Разработка интерфейса программы. Построение концептуальной и реляционной модели БД.
курсовая работа [2,1 M], добавлен 15.06.2014Обследование предметной области. Проектирование реляционной базы данных: описание входной и выходной информации, перечень сущностей и атрибутов, создание модели, выбор ключей. Разработка и обоснование представлений для отображения результатов выборки.
курсовая работа [539,0 K], добавлен 12.12.2011Анализ предметной области с использованием моделей методологии ARIS и разработка ER-диаграммы. Описание входной и выходной информации для проектирования реляционной базы данных. Разработка управляющих запросов и связей между ними с помощью языка SQL.
курсовая работа [975,2 K], добавлен 30.01.2014Описание предметной области разрабатываемой базы данных для теннисного клуба. Обоснование выбора CASE-средства Erwin 8 и MS Access для проектирования базы данных. Построение инфологической модели и логической структуры базы данных, разработка интерфейса.
курсовая работа [3,8 M], добавлен 02.02.2014Элементы современного кулинарного рецепта. Разработка базы данных "Кулинарная книга", содержащей наименования и состояние ингредиентов, единицы измерений, категории, названия национальных кухонь, метод приготовления, основу блюда. Создание таблиц в СУБД.
курсовая работа [589,3 K], добавлен 27.12.2011Описание внешних иерархических моделей базы данных. Проектирование нормализованных локальных ER-моделей. Выявление и устранение эквивалентных сущностей и категорий, дублирования атрибутов и связей. Создание внутренней реляционной модели данного проекта.
курсовая работа [87,9 K], добавлен 20.01.2015Этапы и принципы проектирования базы данных, структура таблиц и запросов, описание информационной и логической модели. Установление логических связей между таблицами и их заполнение с помощью специальных форм. Механизм создания главной кнопочной формы.
курсовая работа [1,5 M], добавлен 07.02.2016