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

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

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



?ба 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

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

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

Запрос 2

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

SQL код:

SELECT Recipe_ID, Recipe_name, Book_ID, Title, Ingredient_ID, QuantityRecipeBook ON Rec_book_ID=Book_IDComposition