2017-09-30 6 views
0

J'essaie de modéliser une base de données qui suit les recettes complexes de construction.Comment modéliser des composants pour des widgets

C'est ce que j'ai jusqu'à présent.

  • Tableau A - recettes (Id, nom, description, portions, temps, température, etc ...)
  • Tableau B - Ingrédients (matières premières)
  • Tableau C - Ingrédients de la recette (fk recipeID, ingrédient fk ID, des quantités d'ingrédients par recette)
  • Tableau D - Etapes de la recette (fk d'ID de recette, étapes pour produire recette)

La prochaine étape est la création d'un modèle pour créer des produits en combinant des portions à partir de plusieurs recettes pour faire 1 produit. Par exemple, une tarte se compose de x amt de pâte, y amt de remplissage et z amt d'une garniture.

la pâte se fait dans des lots de 10x, remplissage se fait par lots de 15y et la garniture obtient effectués dans des lots de 20z

  • Tableau E Composant (nom)
  • Tableau F Component_pieces (fk recipesID, amt

Certains de ces composants sont des produits finaux et ne peuvent pas vraiment être combinés pour créer un nouveau produit (comme Apple Pie).

Le problème est que d'autres composants peuvent être combinés avec des portions provenant des recettes et des ingrédients pour fabriquer un autre produit de troisième niveau. Par exemple, un gâteau de 10 "se compose de 3 étages de 10" gâteau (3 composants de 10 "gâteau) + X amt de remplissage (une recette) + Y amt de Fondant (un ingrédient)

Comment puis-je construire un modèle un représentant à la fois faire une tarte et faire un gâteau complexe sans beaucoup de double emploi?

Merci à l'avance.

Répondre

0

La question fondamentale est que vous avez quelque chose de semblable à ce qui est décrit comme un modèle composite orienté objet C'est-à-dire que les différents niveaux et nœuds d'une hiérarchie peuvent être peuplés de différents types de choses: un gâteau, par exemple, peut contenir des ingrédients uniques tels que de la farine, du sucre, du beurre, etc .; gâteau de couche, il peut c gâteaux ontain, qui à leur tour contiennent des ingrédients eux-mêmes.

Vous avez quelques options pour le problème de gâteau 3 couches, les deux étant réalisables dans une base de données relationnelle car les niveaux ne seront pas trop profonds. Option 1 - Si la relation entre le gâteau de 10 "et le gâteau de 3 couches n'est pas importante, il suffit d'omettre le gâteau de 10" comme composant et de stocker le gâteau 10 ". Ingrédients. En d'autres termes, il y a juste une recette et ses ingrédients et vous vivez avec une certaine duplication. L'inconvénient, bien sûr, est que si la recette de gâteau de 10 "change, vous devrez également évaluer si vous voulez changer le gâteau à 3 couches également

Option 2 - Si la relation est importante, changez le tableau C afin Il se réfère à un composant plus généralisé plutôt qu'à un ingrédient, ce qui permet de contenir une autre recette ainsi que des ingrédients: au lieu de (fk recipeID et fk ingredientID), vous auriez (fk recipeID, fk componentTypeID et componentID). Le componentType serait l'une des deux valeurs - RECIPE ou INGREDIENT.C'est pourquoi ComponentID lui-même ne peut pas être un fk - il peut se référer à l'une des deux tables.