Построение базы данных "Кулинарная книга"
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
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;
Результат: