2011-02-09 19 views
5

Sto cercando di progettare un database "ricetta box" e sto avendo difficoltà a ottenere nel modo giusto. Non ho idea se sono sulla strada giusta o no, ma ecco quello che ho.modellazione di una Food Recipes Database

ricette (recipeID, etc.)
ingrediente (ingredientID, etc.)
recipeIngredient (recipeID, ingredientID, importo)
categoria (IDCategoria, nome)
recipeCategory (recipeID, IDCategoria, nome, ecc)

quindi ho un paio di domande.

  • Come sto andando fino ad ora? Questo design va bene da quello che tutti sapete?
  • Come implementare i passaggi di preparazione? Devo creare un'ulteriore implementazione many-to-many (qualcosa come preparazione (prepID, ecc.) E recipePrep (recipeID, prepID)) o semplicemente aggiungere le indicazioni nella tabella delle ricette? Mi piacerebbe che fosse una lista ordinata nell'interfaccia utente (pagina web).

Grazie per il vostro aiuto.

risposta

1

alcuni pensieri:

si potrebbe desiderare di utilizzare lo stesso tavolo per ricette e ingredienti, con una colonna indicatore del tipo. Il motivo è che le ricette possono contenere sotto-ricette. Chiamiamo la tabella combinata "Item". Allora la vostra tabella di recipeIngredient assomiglierebbe

RecipeIngredient (RecipeId, ItemId, Amount). 

mi aspetto che il tavolo avrebbe anche una colonna di sequenziamento.

Se si vuole fare calcoli con queste ricette (per esempio, il ridimensionamento, l'analisi nutrizionale, la pianificazione della produzione) allora i vostri quantità sarà necessario specificare un'unità di misura. Puoi farlo esplicitamente (avendo una colonna separata per uofm) oppure puoi usare un campo di testo per quantità e aspettarti che l'utente inserisca valori come "1 tazza" o "2 cucchiai". Se segui questo approccio, dovrai assicurarti che ciò che entrano sia riconoscibile e analizzarlo ogni volta che devi utilizzarlo. Questo può diventare un complesso sorprendente, soprattutto se si desidera rappresentare i rendimenti delle ricette in modo formale.

Supponendo che si desidera 1: M da ricetta alla categoria, non sono ancora sicuro perché il vostro tavolo RecipeCategory avrebbe una colonna Nome. Penso che il nome derivi dalla definizione della categoria.

Sono d'accordo con Dave sul fatto che è improbabile che riutilizzi i passaggi di preparazione dalla ricetta alla ricetta, quindi una tabella RecipePreparationSteps (o qualcosa di simile) sarebbe più appropriata.

Tuttavia, le ricette vengono spesso presentate con ingredienti e istruzioni mescolate. per esempio.

Intro text alcuni ingredienti. istruzioni di preparazione altri ingredienti istruzioni di cottura.

Per adattarsi a ciò, è necessario impostare in modo intelligente i valori di sequenza nelle tabelle del passaggio RecipeIngredient e RecipePreparation in modo che sia possibile combinare i dati da entrambi nell'ordine corretto per la presentazione. Un altro approccio sarebbe, invece di queste due tabelle, utilizzare una tabella "RecipeLine" in modo che ogni riga possa rappresentare un'istruzione O un ingrediente. Penso che potrebbe essere quello che stavi suggerendo. I puristi disapprovano questo tipo di sovraccarico del tavolo, ma io non sono un purista.

Questo è un argomento di cui so molto, quindi chiedi qualsiasi cosa.

+0

Ciao Elroy, Grazie per la risposta così eccellente e loquace che apprezzo davvero. Ero un po 'confuso da questa affermazione che hai fatto "... esplicitamente (avendo una colonna separata per uofm) .." e anche il penultimo paragrafo è qualcosa che VERAMENTE vorrei fare. Potresti per favore aiutare con un esempio? Se non ti dispiace posso avere un indirizzo e-mail in modo che io possa inviarti una versione pdf del mio attuale design? Grazie. –

+0

Ciao, sarei felice di accettare la tua email ma non voglio pubblicare il mio indirizzo qui. Sono nuovo di SO. Non vedi un modo per inviarti tramite email il tuo profilo. Se puoi spiegare un altro modo per inviarti un'email, ti preghiamo di farlo, o semplicemente di pubblicare il tuo indirizzo email qui. –

+0

Grazie. Il mio indirizzo email è [email protected] Controllo sempre l'email. Puoi scrivermi e poi risponderò al tuo. –

1

hai guardato in qualsiasi degli schemi esistenti là fuori, come ad esempio this one a DatabaseAnswers?

+0

Ciao Mitch, ho esaminato lo schema e ho cercato di capirlo per un paio di giorni. –

0

Sembra un buon inizio. Alcuni pensieri:

  1. Non vedo la necessità di una tabella recpie. Uno a molti tra ricetta e categoria dovrebbe andare bene.
  2. Una tabella PreparationSteps deve contenere passaggi 1-n per ogni ricetta. Non proverei a riutilizzare i passaggi tra le ricette.
+0

Penso che le ricette possano essere classificate in base a diversi aspetti, come "primi piatti", "secondi piatti" ecc. O come "zuppe", insalate "ecc., O per ingredienti o per cucina ... Quindi una ricetta può appartenere a varie categorie. Ma forse potrebbe essere meglio implementato usando tag piuttosto che categorie. –

+0

Ciao @ Andriy-m, stavo pensando a "tag" quando pensavo a categorie, ma forse dovevano essere due cose diverse. Sono tornato indietro e quarto con quello per un po '. Grazie per il tuo contributo. –