2012-03-01 6 views
1

Je crée une nouvelle base de données et je tombe sur une référence circulaire et je ne suis pas sûr de la meilleure façon de la concevoir.Essayer d'éviter une référence circulaire

donc ici il est en anglais.

J'ai une recette. la recette appelle des ingrédients. Tout cela est bien et bon, sauf un des ingrédients de la recette pourrait nécessiter une autre recette ou il pourrait être un article acheté en magasin.

par exemple: Je veux faire une salade (recette)
Il aura la laitue, les carottes, les oignons (tous bien jusqu'à présent juste acheté en magasin ingrédients..)
mais je veux avoir la vinaigrette ranch. (oh, je peux acheter ranch vinaigrette au magasin, mais j'ai une recette pour ranch vinaigrette que je veux utiliser pour faire la vinaigrette ranch.)

comment voulez-vous créer les tables de recettes et ingrédients dans le meilleur mode? J'ai une pensée toute prête sur la façon de le faire mais cela impliquait un référencement circulaire et tous les sites web disent ne pas y penser.

+0

La réponse de ssmusoke Je crois est correcte. C'est un cas où l'auto-référencement a du sens. Vous devrez gérer la nature imbriquée de la relation avec la logique de programmation. Si vous pensez à l'utilisateur final, vous ne voudrez pas leur montrer tous les ingrédients de chaque ingrédient pour la recette originale. Ils décideraient eux-mêmes s'ils devaient aller s'habiller au ranch, ou cliquer sur un bouton pour aller chercher la recette du ranch. –

Répondre

2

Je suggère les tableaux suivants:

a) Recette - nom, description, isingredient et d'autres informations

b) Ingrédients - nom, description, fromstore (oui ou non la valeur si elle a acheté à un magasin), recipieid (l'identifiant de la recette pour cet ingrédient). Cela permet à des ingrédients d'avoir recipies

c) recipie_ingredients - receipieid, ingredientid (essentiellement cette lie une recette à ses ingrédients)

Le conseil est correct, puisque vous pouvez retrouver dans un des ingrédients de forme de boucle circulaire à recipies etc. MISE À JOUR: Je recommanderais d'ajouter une colonne isingridient à la recette afin que seules les recettes connues pour être des ingrédients puissent être sélectionnées pour être ajoutées à la table des ingrédients. Cela peut aider à réduire les chances de références circulaires