La conception d'une base de données de recettes qui doit inclure des ingrédients ainsi que des sous-recettes
Je suis en train de concevoir une recette de base de données qui doit être très souple, comme il va être de communiquer directement avec nos arrière de la maison, système d'inventaire. C'est ce que j'ai jusqu'à présent en ce qui concerne les tables:
- Recette: cette table contient la recette date: le nom, les étapes nécessaires pour cuisiner, etc.
- Ingrédients/Inventaire: c'est notre arrière de la maison de l'inventaire, ce qui permettra de disposer de l'information sur chacun des produits qui seront utilisés dans nos recettes.
- Recette de la Ligne de l'Élément: C'est la complexité de la table, je veux être en mesure de lien à l'un des ingrédients ainsi que la quantité nécessaire pour la recette, mais j'ai aussi besoin d'être en mesure d'inclure directement des recettes à partir de la recette de la table (comme la sauce marinara que nous faisons en interne), et c'est pourquoi j'ai du mal à déterminer la meilleure voie à la conception de cette table.
En gros, la recette élément de ligne de la table doit être en mesure de lien vers les ingrédients de la table ou de la recette de la table en fonction de l'élément de ligne est nécessaire, et je veux savoir quel serait le moyen le plus efficace de gérer cela.
Je vous remercie beaucoup d'avance!
Je ne vois pas pourquoi cette question a été fermé et certainement pas pour la "non constructive". La question est claire et précise. Le vote pour la rouvrir.
Je suis d'accord. C'est parfaitement valide de la base de données de la modélisation question. Le vote aussi pour la réouverture.
Branko Dimitrijevic; Sonne comme une question raisonnable à moi aussi.
Je suis d'accord. C'est parfaitement valide de la base de données de la modélisation question. Le vote aussi pour la réouverture.
Branko Dimitrijevic; Sonne comme une question raisonnable à moi aussi.
OriginalL'auteur VinceL | 2012-12-14
Vous devez vous connecter pour publier un commentaire.
Ressemble vous avez besoin d'un modèle de base de données similaire à ceci:
Ce modèle possède les propriétés suivantes:
1 Si MySQL pris en charge la VÉRIFICATION des contraintes (ce qui ne pas), vous pouvez vous assurer que l'un (mais pas les deux) d'entre eux est non NULLE, comme ceci:
Comme il est, vous aurez besoin d'un déclencheur pour que.
OriginalL'auteur Branko Dimitrijevic
Ingredients
etRecipes
sont à la fois possibleRecipeItems
:Puis
RecipeLineItems
:Avec cette approche, je vous recommande d'activer le strict mode SQL (ou d'autre des valeurs non valides seront acceptées dans la
ENUM
tapé colonnes avec la chaîne vide''
spécial la valeur de l'erreur): cela pourrait briser la destinée de l'intégrité référentielle du modèle ci-dessus. Une alternative (mais un peu plus fastidieux) approche serait d'appliquer l'intégrité référentielle manuellement à l'aide de déclencheurs.Si seulement MySQL pris en charge
CHECK
contraintes, hein?FOREIGN KEY (IngredientID, Type) REFERENCES RecipeItems (ItemID, Type)
j'ai l'habitude de les mettre en œuvre de manière similaire à la façon dont vous le mettre en place sur le RecipeLineItems table. Donc ma question est, sera un Ingrédient encore être réutilisable pour d'autres recettes à l'aide de cette installation? Merci beaucoup pour votre réponse!Tous les
FOREIGN KEY
n'est contraindre autorisée d'enregistrements à ceux où la liste locale des colonnes correspondent à ceux de la table référencée. Dans ce cas, les enregistrements dans laIngredients
tableau doit correspondre àRecipeItems
sur leID
et leType
(mais depuisIngredients.Type
est limitée à la valeur'Ingredient'
, il assure ainsi qu'uneIngredient
ne peut pas être unRecipe
; l'inverse est aussi vrai de laRecipes
tableau). DepuisRecipeLineItems.ItemID
référencesRecipeItems.ItemID
, mais sans aucune contrainte surRecipeItems.Type
, elle peut faire référence à la foisIngredients
etRecipes
.Bon, je crois que j'ai une bonne compréhension de maintenant, et je pense que c'est une très bonne solution. J'en ai une autre question, quel est le but d'avoir le champ de la quantité à la fois sur les
RecipeItems
table et leRecipeLineItems
table? Je peux voir pourquoi il est nécessaire sur leRecipeLineItems
table, mais je suis pas sûr de ce que son utilisation serait sur leRecipeItems
table. Merci encore pour vos éclaircissements!Comment on sait quelle quantité de sauce marinara est produite par sa recette, ou la quantité de sauce de soja vient dans une bouteille?
Ok, je comprends, j'ai été à l'origine être de mettre le champ de la quantité réelle des ingrédients et de la recette des tables, mais il n'a plus de sens, de le stocker dans une table. Merci encore, c'est certainement beaucoup mieux que les solutions que j'avais mis au point jusqu'à présent!
OriginalL'auteur eggyal
Ce script va vous créer une base de données qui vous permet de gérer les recettes, les ingrédients, la zone de composition (ingredients_recipes) et également des unités pour vous de l'inventaire et de la composition. Il vous permet également de gérer votre inventaire de l'histoire.
Voici la requête pour obtenir votre recette, les ingrédients, la quantité nécessaire et le stock que vous avez actuellement :
la base de données :
le nom est juste le nom de l'unité, par exemple L pour L, mL millilitre, g grammes et ainsi de suite, en fait, c'est le champ "nom" est le champ d'affichage pour votre "liste déroulante". Il doit être unique, imaginez que vous souhaitez comparer l'unité utilisée dans les recettes et celui que vous utilisez pour vous l'inventaire de référence pour chaque unité doit être unique. juste pour faire un parallelle, de ne pas être unique pour ce type de champ vous laisserait par exemple pour une application frontend avec 3 fois "kg" dans la liste déroulante... lequel allez-vous choisir ? la contrainte unique qui ne vous laissera pas de reproduire une telle données.
OriginalL'auteur guignol
Vous aurez besoin de trois tables: une
recipes
table, uningredients
table, et unrecipe_ingredients
tableau qui attribue les ingrédients d'une recette. Vous pouvez également stocker des informations supplémentaires dans ce tableau, comme les quantités. Ainsi, par exemple, si vous avez une recette de soupe de légumes, vous avez plusieurs entrées pour les légumes avec les quantités correspondantes. Ces entrées seraient alors liés à la recette et les ingrédients par l'intermédiaire d'une clé étrangère.EDIT: Schéma à sa plus simple:
Je n'aurais pas nullable clés étrangères que la table serait attribution d'un ingrédient pour une recette efficace, de sorte que les deux clés étrangères sera rempli. Si vous n'avez pas un ingrédient, il ne peut pas être attribué à une recette.
À l'aide de ce schéma, comment utiliser les "la sauce marinara" (une recette) comme ingrédient dans une autre recette?
Je vois. Dans ce cas, vous pourriez avoir deux colonnes dans votre
recipe_ingredients
table:ingredient_type
(unENUM
colonne soit avec des ”ingrédients“ ou ”recette“ comme valeur), puis unitem_id
colonne qui contient la clé étrangère ID de l'enregistrement, de laingredients
de la table ou de larecipes
table.Raison pour voter?
OriginalL'auteur Martin Bean
D'une seule manière.
Donc, si un ingrédient est un plat, il a une recette.
Modifié après une question de l'OP, qui pointait vers un petit défaut dans ma réponse potentielle.
'Marinara Sauce'
est en fait le même que le plat du même nom?DishID = IngredientID, dans le ci-dessus, hmm, tiens.
OriginalL'auteur Tony Hopkinson