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

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



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 отбираются рецепты iислом ингредиентов равным минимальному.

Запрос 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

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

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

Построить график распределения рецептов по книгам, поiитать теоретическую/практическую 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 отбираются рецептыiислом ингредиентов равным минимальному.

Запрос 7

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

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 Поiитать число пользователей, которые оставили отзывы на рецепты по категориям.

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

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

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

Запрос 8

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

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;

Результат: