Построение базы данных "Кулинарная книга"

 

Санкт-Петербургский Государственный Политехнический Университет














Построение базы данных "Кулинарная книга"





Выполнил:

студент группы 3174/1

Моренков Е.В.

Руководитель:

Попов С.Г.






Санкт-Петербург 2011

Оглавление


Описание задачи

Иерархия объектов

ER-диаграмма базы данных

ER-диаграмма

Описание таблиц и полей

Создание таблиц в СУБД

Запросы

Заключение

Приложения


Описание задачи


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

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

Современный кулинарный рецепт содержит:

) Название (часто и национальную принадлежность) блюда;

) Ориентировочное время приготовления блюда;

) Список необходимых для приготовления блюда ингредиентов, их количество и пропорции;

) Оборудование и условия, необходимые для приготовления блюда;

) Количество персон, на которых рассчитано блюдо;

) Калорийность блюда (иногда и содержание белков, жиров и углеводов);

) Пошаговая инструкция по приготовлению блюда;

) Метод сервировки (украшение блюда и его подача на стол).

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

Виды рецептов

) Рецепты блюд по времени приема пищи:

а) Завтрак

b) Второй завтрак

c) Обед

d) Полдник

e) Ужин

2) Рецепты по типу блюд:

a) Закуски

b) Салаты

c) Первые блюда

d) Вторые блюда

e) Десерты

3) Рецепты по способу приготовления блюд:

a) Жаренные

b) Варёные

c) Тушёные

d) Печёные

e) Резанные

4) Рецепты национальных кухонь

a) Русская кухня

b) Французская кухня

c) Итальянская кухня

d) Азиатская кухня

5) Рецепты блюд по основе:

a) Из мяса

b) Из рыбы

c) Из овощей

d) Из птицы

e) Из морепродуктов

f) Из теста

6) Рецепты блюд по событию:

a) Новый год

b) Великий пост

c) Пасха

d) День благодарения

7) Рецепты блюд по состоянию здоровья:

a) Диетические

b) Для язвенников

c) Для диабетиков

d) При ожирении

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


Иерархия объектов



ER-диаграмма базы данных


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

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

Каждый рецепт характеризуется временем приготовления, калорийностью, выходом блюда (в г, кг, порциях, тарелках и т.п.) - пользователь сам определяет, названием и описание способа приготовления.



ER-диаграмма



Описание таблиц и полей


РецептRecipe№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 ID_рецепта Recipe_ID int 2 ID_кухняRec_Cuisine_ID int Cuisine (Cuisine_ID)3 ID_категория Rec_Category_ID int Category (Category_ID)4 ID_способа_приготовления Rec_Cooking_method _ID int Cooking_method (Cooking_method_ID)5 ID_Пользователя Rec_User_ID int User (User_ID)6 ID_Книги Rec_Book_ID int Book (Book_ID)7 Описание_способа_приготовленияDescription_cooking _method tinytext 8 Название рецепта Recipe_name char 1009 Калорийность Сaloric_content int 10 Выход блюда Dish_weight char 10011 ID_основа Rec_Basis_ID int Basis (Basis_ID) 12 ID_автор Rec_Author_ID intAuthor (Author_ID)

КухняCuisine№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 ID_кухняCuisine_ID int первичный ключ 2 Название_кухни Cuisine_name char 60 знаков


КатегорияCategory№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 ID_категории Category_ID int первичный ключ 2 Название_категории Category_name char 50 знаков

Способ приготовленияCooking_method№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 ID_способа приготовления Cooking_method_ID int первичный ключ 2 Название_способа Method_name char 50 знаков

СоставComposition№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 ID_состав Composition_ID int первичный ключ 2 ID_ ингредиент Comp_Ingredient_ID int Ingredient (Ingredient_ID) ссылка на ингредиент 3 ID_рецепт Comp_recipe_ID int Recipe (Recipe_ID) ссылка на блюдо 4 ID_мера_измерения Comp_Unit_measure_ID Int Unit_measure (Unit_measure_ID) Ссылка на меру измерения 5 ID_состояние Comp_condition_ID Int Condition (Condition_ID) Ссылка на состояние 6 Количество Quantity char 60 знаков

СостояниеCondition№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1ID_состоянияCondition_IDintпервичный ключ2НазваниеCondition_namechar50 знаков

Единица измеренияUnit_measure№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 ID_единицы _измерения Unit_measure_ID int первичный ключ 2 Название Unit_measure_name char 50 знаков

ИнгредиентIngredient№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 ID_ингредиента Ingredient_ID int первичный ключ 2 Название Ingredient_name char 50 знаков

ОтзывReference№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 ID_отзыва Reference_ID int первичный ключ 2 ID_пользователя Ref_User_ID int ссылка на User (User_ID) ссылка на пользователя 3 ID_рецепта Ref_Recipe_ID Int Recipe (Recipe_ID) 4 Сообщение Message tinytext 5 Дата Date datetime

АвторAuthor№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 ID_авторство Author_ID int первичный ключ 2 ФлагFlag int


ПользовательUser№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 пользователь_ID user_ID int первичный ключ 2 Имя Name char 50 символов 3 Фамилия Surname char 50 символов 4 Логин Login char 20 символов 5ПарольPasswordchar20 символов

КнигаBook№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 книга_ID Book_ID int первичный ключ 2 Название Tittle char 50 символов 3 Автор author char 50 символов 4 Описание description tinytext

ОсноваBasis№Название по-русскиНазвание по-английскиТип переменныхПримечаниеСсылкаОбоснование типа1 Основа_ID Basis_ID Int Первичный ключ 2 Название Basis_name char 50 символов


Создание таблиц в СУБД


drop database if exists Recipe_book;database Recipe_book;Recipe_book database;

Cuisine

create table Cuisine(_ID int NOT NULL auto_increment PRIMARY KEY,_name char(60) default NULL)ENGINE=InnoDB;

Category

create table Category(_ID int NOT NULL auto_increment PRIMARY KEY,_name char(50) default NULL)ENGINE=InnoDB;

Cooking_method

create table Cooking_method(_method_ID int NOT NULL auto_increment PRIMARY KEY,_name char(50) default NULL)ENGINE=InnoDB;

Conditions

create table Conditions(_ID int NOT NULL auto_increment PRIMARY KEY,_name char(50) default NULL)ENGINE=InnoDB;

Unit_measure

create table Unit_measure(_measure_ID int NOT NULL auto_increment PRIMARY KEY,_measure_name char(50) default NULL)ENGINE=InnoDB;

Basis

create table Basis(_ID int NOT NULL auto_increment PRIMARY KEY,_name char(50) default NULL)ENGINE=InnoDB;

Author

create table Author(_ID int NOT NULL auto_increment PRIMARY KEY,char(50) default NULL)ENGINE=InnoDB;

Ingredient

create table Ingredient(_ID int NOT NULL auto_increment PRIMARY KEY,_name char(50) default NULL)ENGINE=InnoDB;

User

create table User(_ID int NOT NULL auto_increment PRIMARY KEY,_name char(50) default NULL,_surname char(50) default NULL,char(50) default NULL,char(50) default NULL)ENGINE=InnoDB;

Reference

create table Reference(_ID int NOT NULL auto_increment PRIMARY KEY,_User_ID int NOT NULL,user_ind (Ref_User_ID),_Recipe_ID int NOT NULL,Ref_Recipe_ind (Ref_Recipe_ID),tinytext default NULL,datetime default NULL,KEY (Ref_User_ID)User(User_ID)DELETE NO ACTIONUPDATE NO ACTION)ENGINE=InnoDB;

Composition

create table Composition(_ID int NOT NULL auto_increment PRIMARY KEY,_Ingredient_ID int NOT NULL,Comp_Ingredient_ind (Comp_Ingredient_ID),_Recipe_ID int NOT NULL,Comp_Recipe_ind (Comp_Recipe_ID),_Unit_measure_ID int NOT NULL,Comp_Unit_measure (Comp_unit_measure_ID),_Condition_ID int NOT NULL,Comp_Condition_ind (Comp_Condition_ID),int default NULL,KEY (Comp_Ingredient_ID)Ingredient(Ingredient_ID)DELETE NO ACTIONUPDATE NO ACTION,KEY (Comp_Unit_measure_ID)Unit_measure(Unit_measure_ID)DELETE NO ACTIONUPDATE NO ACTION,KEY (Comp_Condition_ID)Conditions(Condition_ID)DELETE NO ACTIONUPDATE NO ACTION

)ENGINE=InnoDB;

Book

create table Book(_ID int NOT NULL auto_increment PRIMARY KEY,char(50) default NULL,char(50) default NULL,tinytext default NULL)ENGINE=InnoDB;

Recipe

create table Recipe(_ID int NOT NULL auto_increment PRIMARY KEY,_Cuisine_ID int NOT NULL,Rec_Cuisine_ind (Rec_Cuisine_ID),_Category_ID int NOT NULL,Rec_Category_ind (Rec_Category_ID),_Cooking_method_ID int NOT NULL,Rec_Cooking_method_ind (Rec_Cooking_method_ID),_User_ID int NOT NULL,Rec_User_ind (Rec_User_ID),_Book_ID int NOT NULL,Rec_Book_ind (Rec_Book_ID),_Basis_ID int NOT NULL,Rec_Basis_ind (Rec_Basis_ID),_Author_ID int NOT NULL,Rec_Author_ind (Rec_Author_ID),_cooking_method tinytext default NULL,_name char(100) default NULL,_content int default NULL,_weight char(100) default NULL,KEY (Rec_Cuisine_ID)Cuisine(Cuisine_ID)DELETE NO ACTIONUPDATE NO ACTION,KEY (Rec_Category_ID)Category(Category_ID)DELETE NO ACTIONUPDATE NO ACTION,KEY (Rec_Cooking_method_ID)Cooking_method(Cooking_method_ID)DELETE NO ACTIONUPDATE NO ACTION,KEY (Rec_User_ID)User(User_ID)DELETE NO ACTIONUPDATE NO ACTION,KEY (Rec_Book_ID)Book(Book_ID)DELETE NO ACTIONUPDATE NO ACTION,KEY (Rec_Basis_ID)Basis(Basis_ID)DELETE NO ACTIONUPDATE NO ACTION,

FOREIGN KEY (Rec_Author_ID)Author(Author_ID)DELETE NO ACTIONUPDATE NO ACTION

)ENGINE=InnoDB;

Relation

ALTER TABLE CompositionFOREIGN KEY (Comp_Recipe_ID)Recipe(Recipe_ID)DELETE NO ACTIONUPDATE NO ACTION;TABLE ReferenceFOREIGN KEY (Ref_Recipe_ID)Recipe(Recipe_ID)DELETE NO ACTIONUPDATE NO ACTION;

Запросы

база данные кулинарный книга

Запрос 1.

Вывести все рецепты, написанные пользователями, у которых 5 отзывов и метод приготовления =вареное

SQL код:


SELECT Recipe_ID, Recipe_name, Method_name, count(Recipe_ID=Ref_recipe_ID)RecipeCooking_method ON Rec_cooking_method_ID=Cooking_method_IDReference ON Recipe_ID=Ref_Recipe_IDmethod_name='Вареное'by Recipe_IDcount(Recipe_ID=Ref_recipe_ID)=5;


Результат:


Recipe_IDRecipe_nameMethod_namecount(Recipe_Id=Ref_recipe_ID22ЗпыщецжпгъщВареное531ЮкогохигыпчВареное5


Эффективность выполнения запроса:


idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLECooking_methodALLPRIMARYNULLNULLNULL4Using where; Using temporary; Using filesort1SIMPLEReciperefPrimary, Rec_cooking_method_indRec_Cooking_method4recipe_book.Cooking_ method_ID1191SIMPLEReferencerefRef_Recipe_indRef_Recipe_ind4recipe_book.Recipe_ID1Using index


Интерпретация:

Объединяются таблицы: метод приготовления, рецепт, отзыв. Затем выбираются рецепты, в которых метод приготовления =вареному. Далее выбираются рецепты с числом отзывов=5.

Запрос 2

Вывести все рецепты, взятые из книги = «Рпысндън», в которой одновременно присутствуют 2 ингредиента: мороженое сливочное И шпроты, количество соли <10 граммов.

SQL код:


SELECT Recipe_ID, Recipe_name, Book_ID, Title, Ingredient_ID, QuantityRecipeBook ON Rec_book_ID=Book_IDComposition ON Recipe_ID=Comp_recipe_IDIngredient ON Comp_Ingredient_ID=Ingredient_IDUnit_measure ON Comp_Unit_measure_ID=Unit_measure_ID(book_ID=4)(comp_Ingredient_ID=343 AND Quantity<10 AND Unit_measure_ID=5)Recipe_ID IN (Recipe_IDCompositionRecipe ON Recipe_ID=Comp_Recipe_IDComp_Ingredient_ID=210 OR Comp_Ingredient_ID=439BY Recipe_IDcount(Comp_ingredient_ID)=2BY Recipe_ID)by Recipe_ID;


Результат:


recipe_IDRecipe_nameBook_IDTitleIngredient_IDQuantity1РоцъчрлщбшчРпасндънРпысндън3433

Эффективность выполнения запроса:


idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1PRIMARYBookconstPRIMARYPRIMARY4const1Using temporary; Using filesort1PRIMARYIngredientconstPRIMARYPRIMARY4const1Using index1PRIMARYUnit_measureconstPRIMARYPRIMARY4const1Using index1PRIMARYCompositionindex_mergeComp_Ingredient_ind, Comp_Recipe_ind, Comp_Unit_measureComp_Ingedient_ind, Comp_ Unit_measure4,4NULL1Using intersect(Comp_Ingredient_ind,Comp_Unit_measure1PRIMARYRecipeeq_refPRIMARY, Rec_Book_indPRIMARY4recipe_book.Composition.Comp_Recipe_ ID1Using wher2DEPENDENT SUBQUERYCompositionrangeComp_Ingredient_ind, Comp_recipe_indComp_Ingredient_ind4NULL32Using where; Using temporary; Using filesort2DEPENDENT SUBQUERYRecipeeq_refPRIMARYPRIMARY4Recipe_book.Compostion.Comp_Recipe_ID1using index

Интерпретация:

Объединяются таблицы: книга, ингредиент, единица измерения, состав и рецепт. Выполняется отбор рецептов, которые взяты из данной книги, в которых есть соль и её содержание меньше 10 г. Далее выполняется вложенный запрос, выдающий список рецептов, в которых есть необходимые нам ингредиенты.

Запрос 3

Найти имена пользователей, которые поместили рецепты с минимальным числом ингредиентов

SQL код:


SELECT User_ID, User_name, count(Comp_Ingredient_ID)RecipeComposition ON Recipe_ID=Comp_recipe_IDUser ON Rec_user_ID=User_IDRec_Author_ID=1BY User_IDcount(Comp_Ingredient_ID)=(Select count(Comp_Ingredient_ID)CompositionRecipe ON Comp_Recipe_ID=Recipe_IDBY Recipe_IDBY count(Comp_Ingredient_ID)1 ORDER BY User_ID;


Результат:


User_IDUser_namecount(Comp_Ingredient_ID)37Джинат195Афин1116Асмик1

Эффективность выполнения запроса:


idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEUserindexPRIMARYPRIMARY4NULL4771SIMPLEReciperefPrimary, Rec_user_ind,Rec_author_indRec_User_ind4recipe_book.User_ID1Using where1SIMPLECompositionrefComp_Recipe_indComp_Recipe_ind4recipe_book.Recipe. Recipe_ID22SUBQUERYRecipeindexPRIMARYPRIMARY4NULL953Using index; Using temporary; Using filesort2SUBQUERYCompositionrefComp_Recipe_indComp_Recipe_indrecipe_book.Recipe. Recipe_ID2


Интерпретация:

Объединяются таблицы: Пользователь, Рецепт, Состав. Выбираются авторские рецепты и запросом having отбираются рецепты с числом ингредиентов равным минимальному.

Запрос 4

Найти имена пользователей, которые оставили максимальное число отзывов на рецепты

SQL код:


SELECT User_ID, Login, User_Surname, User_Name, count(Ref_User_ID)UserReference ON User_ID=Ref_User_IDBY User_IDcount(Ref_user_ID)=(SELECT count(Ref_user_ID)ReferenceUser ON Ref_user_ID=User_IDBY User_IDBY count(Ref_user_ID) DESC

LIMIT 1);


Результат:


User_IDLoginUser_SurnameUser_Namecount(Ref_User_ID)448447ВостроваВиталий15


Эффективность выполнения запроса:


idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1PRIMARYUserindexPRIMARYPRIMARY4NULL4771PRIMARYReferencerefUser_indUser_ind4recipe_book.User.User_ID3Using index2SUBQUERYUserindexPRIMARYPRIMARY4NULL477Using index; Using temporary; Using filesort2SUBQUERYReferencerefUser_indUser_ind4recipe_book.User.Recipe_ID3Using index


Интерпретация:

Объединяются таблицы: Пользователь и отзыв. В having отбираются пользователи с максимальным числом оставленных пользователей.

Запрос 5

Посчитать количество рецептов с одинаковым числом ингредиентов

SQL код:


CREATE TEMPORARY TABLE same_rec_count(_ID int (11) unsigned,C_count int (11) unsigned

);INTO same_rec_count SELECT Recipe_ID,(Comp_ingredient_ID)CompositionRecipe ON Recipe_ID=Comp_recipe_IDBY Recipe_IDBY count(Comp_ingredient_ID);C_count, count(number_ID)same_rec_countBY C_count;


Результат:


C_countcount(number_ID)11862198320642125190622071948182920010212Запрос 6

Построить график распределения рецептов по книгам, посчитать теоретическую/практическую MX, DX,

SQL код:


SELECT Book_ID,count(Recipe_ID)RecipeBook ON Rec_book_ID=Book_IDRec_author_ID=2BY Book_IDBY Book_ID;


Результат:


1 9 2 17 3 7 4 6 5 6 6 12 7 8 … MXтеор=10 MХпракт=10.54 Теоретически, из книг должно быть 500 рецептов, практически 527 527/50=10.54=>распределение равномерное DXпракт=11,85


Эффективность выполнения запроса:


idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEBookindexPRIMARYPRIMARY4NULL50Using index1SIMPLEReciperefPrimary, Rec_Book_ind,Rec_ author_indRec_Book_ind4recipe_book.Book.Book_ID9Using where


Объединяются таблицы: Пользователь, Рецепт, Состав. Выбираются авторские рецепты и запросом having отбираются рецептыс числом ингредиентов равным минимальному.

Запрос 7

7.1 Посчитать число отзывов пользователей на рецепты из книг, число отзывов на рецепты не из книг

SQL код:


SELECT count(Reference_ID)ReferenceRecipe ON Ref_recipe_ID=Recipe_ID

where Rec_author_ID=2;count(Reference_ID)ReferenceRecipe ON Ref_recipe_ID=Recipe_IDRec_author_ID=1;


Результат:


Из книг count(Reference_ID) 1605 От пользователя count(Reference_ID) 1418

Проверка: Select count(Reference_ID) FROM Reference;


count(Reference_ID) 3023 605+1418=3023


Эффективность выполнения запроса:


idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEReciperefPRIMARY,Re_Author_indRec_Author_ind4const476Using index1SIMPLEReferencerefRef_Recipe_indRef_Recipe_ind4recipe_book.Recipe.Recipe_ID1Using where


7.2 Посчитать число пользователей, которые оставили отзывы на рецепты по категориям.

SQL код:


SELECT Category_ID, Category_name, count(User_ID)UserReference ON User_ID=Ref_user_IDRecipe ON Ref_recipe_ID=Recipe_IDCategory ON Category_ID=Rec_category_IDBY Category_ID;


Результат:


Category_IDCategory_nameCount(User_ID)1закуска2752суп2603салат3324десерт3255пицца3906второе блюдо3667гарнир3498каша3049напитки322


Эффективность выполнения запроса:


idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLECategoryindexPRIMARYPRIMARY4NULL91SIMPLEReciperefPrimary, Rec_Category_indRec_Category_ind4recipe_book.Category.Category_ID52Using index1SIMPLEReferencerefuser_ind,Ref_Recipe_indRef_Recipe_ind4recipe_book.Recipe.Recipe_ID11SIMPLEUsereq_refPRIMARYPRIMARY4recipe_book.Reference.Ref_User_ID1Using index


Интерпретация:

Объединяются таблицы: Категории, Рецепт, Отзыв и Пользователь. Рецепты группируются по категориям и ведется подсчет рецептов в каждой группе.

Запрос 8

Посчитать количество рецептов по каждой кухне и по каждой категории

SQL код:


explain SELECT Cuisine_name, Category_name, count(Recipe_ID)RecipeCuisine ON Cuisine_ID=Rec_cuisine_IDCategory ON Category_ID=Rec_category_IDby Cuisine_ID,Category_ID;


Результат:


Cuisine_nameCategory_namecount(Recipe_ID)Европейская кухнязакуска21Европейская кухнясуп22Европейская кухнясалат24


Эффективность выполнения запроса:


idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLECuisineALLPRIMARYNULLNULLNULL5Using temporary; Using filesort1SIMPLEReciperefRec_Cuisine_ind,Rec_Category_indRec_Cuisine_ind4recipe_book.Cuisine.Cuisine_ID951SIMPLECategoryeq_refPRIMARYNULL4recipe_book.Recipe.Rec_Category_ID1


Интерпретация:

Объединяются таблицы: Пользователь, Рецепт, Состав. Выбираются авторские рецепты и запросом having отбираются рецептыс числом ингредиентов равным минимальному.


Заключение


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

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


Приложение 1


Программа заполнения базы данных.

Заполнение таблицы «Книга»


#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <stdio.h>

#include <time.h>

#include <fstream>

#include <string>namespace std;names

{string s1;l;*next,*prev;

};surnames

{string s2;k;*next,*prev;

};Cname

{private:g;:(void);create(void);

};::Cname(void)

{create();

}Cname::create(void)

{float c1,h1,t1;book_name, author, descr;char c,h,t;(time(NULL));g("book.txt");(int i=0;i<50;i++)

{author.clear();_name.clear();.clear();

c1=rand();=rand();=rand();=192+(c1/32767)*31;=192+(h1/32767)*31;=192+(t1/32767)*31;

author.push_back(c);_name.push_back(h);.push_back(t);(int j=0; j < 7; j++)

{c1=rand();=rand();=rand();=224+(c1/32767)*31;=224+(h1/32767)*31;=224+(t1/32767)*31;

author.push_back(c);_name.push_back(h);.push_back(t);

}<<"Insert into Book SET Book_ID='"<<i+1<<"', Title='"<< book_name<<"', Author='"<<author<<"', Description='"<<descr<<"';\n";<<"Insert into Book SET Book_ID='"<<i+1<<"', Title='"<< book_name<<"', Author='"<<author<<"', Description='"<<descr<<"';\n";}.close();

}main (void)

{setlocale(LC_ALL,"Russian");g;

_getch();

}


Заполнение таблицы Пользователь


#include <iostream>

#include <conio.h>

#include <stdio.h>

#include <time.h>

#include <fstream>

#include <string>namespace std;names

{string s1;l;*next,*prev;

};surnames

{string s2;k;*next,*prev;

};Cname

{private:f,sur,g;a;*nnew,*tec,*start;*nnew_s,*tec_s,*start_s;

int max_names,max_surnames;

public:(void);build_names(void);build_surnames(void);create(void);

};::Cname(void)

{max_names=1;_surnames=1;_names();_surnames();();.close();.close();.close();

}Cname::build_names(void)

{string s; int i=0;f("name.txt");=new names;>prev=NULL;>next=NULL;=tec;(f.good())

{getline(f,s);>s1=s;>l=i;++;_names++;=new names;>prev=tec;>next=NULL;>next=nnew;=nnew;

//cout<<s<<"\n";

}=start;.close();

}Cname::build_surnames(void)

{string s; int i=0;sur("surname.txt");_s=new surnames;_s->prev=NULL;_s->next=NULL;_s=tec_s;(sur.good())

{getline(sur,s);_s->s2=s;_s->k=i;++;_surnames++;_s=new surnames;_s->prev=tec_s;_s->next=NULL;_s->next=nnew_s;_s=nnew_s;

//cout<<tec_s->s2;

}_s=start_s;.close();

}Cname::create(void)

{int c=500,q,w,j,password;double q1,w1,p1;(time(NULL));g("zapros_500.txt");(int i=0;i<500;i++)

{q1=rand();=1+(q1/32767)*(max_names-1);=q1/32767.0;

cout<<q1<<"\n";=rand();

w=1+(w1/32767)*(max_surnames-1);=rand();

//cout<<q<<" "<<w<<" "<<password<<endl;=start;_s=start_s;(j=0;j<q;j++)=tec->next;(j=0;j<w;j++)_s=tec_s->next;

//cout<<"Insert into User SET User_name='"<<tec->s1<<"', User_surnames='"<<tec_s->s2<<"', Login='"<<i<<"', Password='"<<password<<"', User_ID="<<i+1<<";\n";<<"Insert into User SET User_name='"<<tec->s1<<"', User_surname='"<<tec_s->s2<<"', Login='"<<i<<"', Password='"<<password<<"', User_ID="<<i+1<<";\n";

}.close();

}main (void)

{setlocale(LC_ALL,"Russian");g;

_getch();

}


Заполнение таблицы Состав


#include <iostream>

#include <conio.h>

#include <stdio.h>

#include <time.h>

#include <fstream>

#include <string>

#include <math.h>namespace std;Ccomp

{private:g;:(void);create(void);

};::Ccomp(void)

{create();

};Ccomp::create(void)

{double num,ingr,cond,measure,quant;comp_ingr, comp_num, comp_unit, comp_cond,quantity;(time(NULL));g("6_composition.sql");(int i=0;i<1000;i++)

{num=(rand()/double(32767));_num=1+num*10;(int j=0;j<comp_num;j++)

{ingr=rand();_ingr=1+(ingr/double(32767))*452;=rand();_cond=1+(cond/double(32767))*56;=rand();_unit=1+(measure/double(32767))*14;=rand();=1+(quant/double(32767))*20;<<"Insert into Composition SET Comp_Ingredient_ID="<<comp_ingr<<", Comp_Recipe_ID="<<i+1<<", Comp_Unit_measure_ID="<<comp_unit<<", Comp_Condition_ID="<<comp_cond<<", Quantity="<<quantity<<";\n";

}

}.close();

}main (void)

{setlocale(LC_ALL,"Russian");g;

_getch();

}


Заполнение таблицы Отзыв


#include <iostream>

#include <conio.h>

#include <stdio.h>

#include <time.h>

#include <fstream>

#include <string>namespace std;Cref

{private:g;:(void);create(void);

};::Cref(void)

{create();

}Cref::create(void)

{double num,user,simv;ref_num,user_id,y,m,d,h,min,s;c;message;(time(NULL));g("8_reference.sql");(int i=0;i<1000;i++)

{num=rand();_num=1+(num/32767)*5;

for(int j=0;j<ref_num;j++)

{user=rand();_id=1+(user/double(32767))*500;=rand();=192+(simv/double(32767.0))*31;.clear();.push_back(c);(int k=0;k<20;k++)

{simv=rand();=224+(simv/double(32767.0))*31;.push_back(c);

}=2008+rand()/(32767.0)*3;m=rand()/(double(32767))*12;d=1+rand()/(double(32767))*30;h=rand()/(double(32767))*24;min=rand()/(32767.0)*60;s=rand()/(double(32767))*60;<<"Insert into Reference SET Ref_User_ID="<<user_id<<", Ref_Recipe_ID="<<i+1<<", Message='"<<message<<"', Date='"<<y<<"-"<<m<<"-"<<d<<" "<<h<<":"<<min<<":"<<s<<"';\n";

}

}.close();

}main (void)

{setlocale(LC_ALL,"Russian");g;

_getch();

}


Приложение 2


Данные заполнения словарей

Кухня

Европейская кухня

Русская кухня

Японская кухня

Американская кухня

Китайская кухня

Категория

закуска

суп

салат

десерт

пицца

второе блюдо

гарнир

каша

напитки

Автор

авторское

из книги

Основа

мясное

рыбное

овощное

Метод приготовления

Вареное

Тушеное

Жареное

Сырое

Единица измерения


щепотка зубчик мл л г ложка/ложек штука/штукпакетик упаковка кубик/кубиков картофелин ломтик кг зонтик банка/банок

Состояние


размороженное замороженное свежепросольное свежее консервированный соленое маринованноезасоленное обезжиренное нежареный классическое перченое г/копчения х/копчения

Ингредиенты


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

Приложение 3


Примеры заполнения базы данных

Таблица «Национальная кухня»


INSERT INTO Cuisine SET Cuisine_name='Европейская кухня', Cuisine_ID=1;INTO Cuisine SET Cuisine_name='Русская кухня', Cuisine_ID=2;


Таблица «Категория»


Insert into Category SET Category_name='закуска', Category_ID=1;into Category SET Category_name='суп', Category_ID=2;


Таблица «Основа»


INSERT INTO Basis SET Basis_name='мясное', Basis_ID=1;INTO Basis SET Basis_name='рыбное', Basis_ID=2;


Таблица «Метод приготовления»


INSERT INTO Cooking_method SET Method_name='Вареное', Cooking_method_ID=1;INTO Cooking_method SET Method_name='Тушеное', Cooking_method_ID=2;


Таблица «Единица измерения»


INSERT INTO Unit_measure SET Unit_measure_name='щепотка', Unit_measure_ID=1;

INSERT INTO Unit_measure SET Unit_measure_name='зубчик', Unit_measure_ID=2;


Таблица «Состояние»


INSERT INTO Conditions SET Conditions_name='размороженое', Condition_ID=1;INTO Conditions SET Conditions_name='замороженое', Condition_ID=2;


Таблица «Книга»


Insert into Book SET Book_ID='1', Title='Мхррецьы', Author='Члуюабюо', Description='Пчигдфеь';into Book SET Book_ID='2', Title='Цбакючоь', Author='Ювьйдюма', Description='Ьемгммзл';


Таблица «Пользователь»


Insert into User SET User_name='Василиа', User_surname='Шамигулова', Login='0', Password='6712', User_ID=1;into User SET User_name='Борис', User_surname='Пшенина', Login='1', Password='1273', User_ID=2;


Таблица «Ингредиент»


INSERT INTO Ingredient SET Ingredient_name='абрикосы', Ingredient_ID=1;INTO Ingredient SET Ingredient_name='авокадо', Ingredient_ID=2;


Таблица «Состав»


Insert into Composition SET Comp_Ingredient_ID=343, Comp_Recipe_ID=1, Comp_Unit_measure_ID=5, Comp_Condition_ID=18, Quantity=3;into Composition SET Comp_Ingredient_ID=210, Comp_Recipe_ID=1, Comp_Unit_measure_ID=13, Comp_Condition_ID=25, Quantity=7;


Таблица «Рецепт»


Insert into Recipe SET Recipe_ID=1, Rec_Cuisine_ID=1, Rec_Category_ID=5, Rec_Cooking_method_ID=2, Rec_Book_ID=4, Rec_User_ID=258, Description_cooking_method='Ъцэцэшъуиьзтцппебцичъъмжчгутечогьтулиюспэ', Recipe_name='Роцъхрлщбшч', Rec_author_ID=1, Caloric_content='168', Dish_weight='бийхф', Rec_Basis_ID='2';

Insert into Recipe SET Recipe_ID=2, Rec_Cuisine_ID=1, Rec_Category_ID=8, Rec_Cooking_method_ID=4, Rec_Book_ID=18, Rec_User_ID=166, Description_cooking_method='Стуаютгжъчаощпюшэкцруйщхэждэсьыццттебнйый', Recipe_name='Чтьмъвгкюсж', Rec_author_ID=2, Caloric_content='580', Dish_weight='имлгт', Rec_Basis_ID='2';


Таблица «Отзыв»


Insert into Reference SET Ref_User_ID=302, Ref_Recipe_ID=1, Message='Йтичцгыомзывпьрепинии', Date='2009-8-12 9:27:40';

Insert into Reference SET Ref_User_ID=414, Ref_Recipe_ID=1, Message='Гдсхъьрлбмыпэыцщнетнп', Date='2009-11-19 22:11:35';


Санкт-Петербургский Государственный Политехнический Университет Построение базы данных "Кулинарная к

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ