Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Memorizzare ricette, materie prime e magazzino di un ristorante

14 views
Skip to first unread message

^Bart

unread,
Jul 10, 2021, 5:09:11 AM7/10/21
to
Salve,

sto facendo alcuni test per non lasciare nel dimenticatoio gli studi su
php, MySQL, etc. non ho velleità da programmatore ma semplicemente la
logica di come creare DB devo dire che aiuta molto anche
nell'organizzazione del lavoro in generale!

L'esempio a cui mi sto dedicando è quello di un ristorante, nella prima
tabella ipotizzo di inserire il materiale che si utilizza:

CREATE TABLE items
(
item_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
language_id SMALLINT(5) UNSIGNED NOT NULL,
brand VARCHAR(30) DEFAULT NULL,
barcode CHAR(15) DEFAULT NULL,
item ENUM ("Food","Drink","Thing"),
expiration ENUM ("Yes","No"),
PRIMARY KEY (item_id),
INDEX (language_id),
FOREIGN KEY (language_id) REFERENCES languages (language_id)
)
ENGINE=INNODB;

Nella seconda tabella creo delle sotto categorie tipo se memorizzo nella
prima pasta in questa seguente scriverò spaghetti, tagliatelle, etc.
oppure se nella prima memorizzo latte in questa seconda inserirò latte
di mucca, pecora etc.

CREATE TABLE subitems
(
subitem_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
language_id SMALLINT(5) UNSIGNED NOT NULL,
item_id INT(10) UNSIGNED NOT NULL,
rawmaterial ENUM ("Yes","No"),
PRIMARY KEY (subitem_id),
INDEX (language_id),
FOREIGN KEY (language_id) REFERENCES languages (language_id),
INDEX (language_id),
FOREIGN KEY (item_id) REFERENCES items (item_id)
)
ENGINE=INNODB;

Ora vado a creare la tabella del magazzino che linkerò a subitems perché
mi occorre sapere quanti spaghetti ho in casa e non genericamente quanta
pasta:

CREATE TABLE warehouses
(
warehouse_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
item_id INT(10) UNSIGNED NOT NULL,
userdetail_id INT(10) UNSIGNED NOT NULL,
day DATE DEFAULT NULL,
expirationdate DATE DEFAULT NULL,
quantity INT(10) NOT NULL,
minimumquantity INT(10) NOT NULL,
weight DECIMAL (9,4) DEFAULT NULL,
minimumweight DECIMAL (9,4) DEFAULT NULL,
PRIMARY KEY (warehouse_id),
INDEX (item_id),
FOREIGN KEY (item_id) REFERENCES items (item_id),
INDEX (userdetail_id),
FOREIGN KEY (userdetail_id) REFERENCES userdetails (warehouse_id)
)
ENGINE=INNODB;

Infine la tabella legata alle ricette in cui inserire gli ingredienti
specifici legata a subitems ma legata anche a wharehouses perché "in
automatico" vorrei scalare la quantità ma a questo punto dovrei inserire
dei campi quantità per cui se per fare 1 carbonara ci vogliono 2 etti di
spaghetti dev'esserci una query che mi verifichi la giacenza...

CREATE TABLE recipeingredients
(
recipe_id INT(10) UNSIGNED NOT NULL,
subitem_id INT(10) UNSIGNED NOT NULL,
keepingredient ENUM ("Show","Hide"),
warehouse_id INT(10) UNSIGNED,
PRIMARY KEY (recipe_id, subfoodgroup_id),
INDEX (warehouseitem_id),
FOREIGN KEY (warehouse_id) REFERENCES warehouses (warehouse_id),
INDEX (recipe_id),
FOREIGN KEY (recipe_id) REFERENCES recipes (recipe_id),
INDEX (subitem_id),
FOREIGN KEY (subitem_id) REFERENCES subitems (subitem_id),
INDEX (warehouse_id),
FOREIGN KEY (warehouse_id) REFERENCES warehouses (warehouse_id)
)
ENGINE=INNODB;

Il discorso è complesso ma interessante per questo gli sto dedicando del
tempo nel ragionarci dietro! :)

Saluti.
^Bart

^Bart

unread,
Jul 10, 2021, 6:40:57 AM7/10/21
to
> CREATE TABLE recipeingredients
> (
> recipe_id INT(10) UNSIGNED NOT NULL,
> subitem_id INT(10) UNSIGNED NOT NULL,
> keepingredient ENUM ("Show","Hide"),
> warehouse_id INT(10) UNSIGNED,
> PRIMARY KEY (recipe_id, subfoodgroup_id),
> INDEX (warehouseitem_id),
> FOREIGN KEY (warehouse_id) REFERENCES warehouses (warehouse_id),
> INDEX (recipe_id),
> FOREIGN KEY (recipe_id) REFERENCES recipes (recipe_id),
> INDEX (subitem_id),
> FOREIGN KEY (subitem_id) REFERENCES subitems (subitem_id),
> INDEX (warehouse_id),
> FOREIGN KEY (warehouse_id) REFERENCES warehouses (warehouse_id)
> )
> ENGINE=INNODB;

Ho trovato la quadra, nella tabella recipeingredients devo mettere solo
i dati che servono a fare la ricetta quindi linkarla ad item e subitem
in modo che possa filtrare tutte le ricette che abbiano il latte ed
eventualmente tutte quelle che abbiano il latte di mucca, di capra, etc.

Dovrò creare una tabella tipo orders dove inserire gli ordini quindi le
varie ricette ed in quel momento ci sarà il "dialogo" con wharehouses
anche se sarà solo qualcosa a livello di query e non un link con una FK...

> Saluti.
> ^Bart

Ammammata

unread,
Jul 12, 2021, 3:05:41 AM7/12/21
to
Il giorno Sat 10 Jul 2021 12:40:54p, *^Bart* ha inviato su it.comp.www.php
il messaggio news:scbtfm$d6s$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> Ho trovato la quadra, nella tabella recipeingredients devo mettere solo
> i dati che servono a fare la ricetta

pensi di dover gestire anche ricette con ingredienti ripetuti o
sottoricette?

esempio: lasagne

la farina serve per fare la pasta ma anche la besciamella (che potrebbe
essere una ricetta a parte), o le uova in una torta che fanno parte
dell'impasto ma anche di una possibile guarnizione allo zabaglione (che
potrebbe essere una ricetta a parte, come la besciamella)

--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

bramante

unread,
Jul 12, 2021, 10:04:00 AM7/12/21
to
Il 10/07/21 11:09, ^Bart ha scritto:
se ho capito bene da quello che scrivi, la prima tabella è una categoria
mentre la seconda un dettaglio della categoria.

se il ragionamento è questo barcode e brand non metterlo qui, ma
utilizza una tabella separata dei "prodotti"
la "pasta sfoglia barilla" e la "pasta sfoglia buitoni" sono "prodotti"
appartenenti alla categoria "pasta" e sottocategoria "pasta sfoglia"
e tra l'altro possono essere ancora suddivisi per specificità
come peso (500 gr o 1 kg) o contenuto (senza glutine, senza grassi
aggiunti, ecc) e ognuno ha il suo specifico barcode.
il prodotto inteso come marca - modello - specifiche, può appartenere a
più categoria.

"barilla farina tipo 0 500gr"
può appartenere a pasta come dolci come pizza e così via

la categoria e sottocategoria la puoi fare con un unica tabella
(categoria) e gestire le relazioni con una altra tabella n - n

la categoria pasta è sia una categoria che una sottocategoria della
categoria carboidrati.

a livello di separazione dei dati
ogni tabella deve contenere un set di informazioni omogenei che sono
necessari alla parte più piccola del tuo progetto.




^Bart

unread,
Jul 15, 2021, 7:00:05 AM7/15/21
to
> pensi di dover gestire anche ricette con ingredienti ripetuti o
> sottoricette?

Interessante dubbio! :)

> esempio: lasagne
>
> la farina serve per fare la pasta ma anche la besciamella (che potrebbe
> essere una ricetta a parte), o le uova in una torta che fanno parte
> dell'impasto ma anche di una possibile guarnizione allo zabaglione (che
> potrebbe essere una ricetta a parte, come la besciamella)

Pensandoci bene bisognerebbe considerare la besciamella come una ricetta
da sommare ad una ricetta già esistente senza stare ogni volta a
riscriverla ed inserire gli ingredienti, sarebbe assurdo riscriverla
ogni volta a questo punto però come gestirla?

Attualmente ho queste tabelle:

ITEMS
(contiene la lista del materiale presente in un ristorante con un campo
booleano che identifica food o nofood)

SUBITEMS
(contiene la lista dei "sotto ingredienti" tipo se in ITEMS ho latte qui
avrò latte di mucca, pecora etc.)

RECIPES
(contiene il nome della ricetta, l'immagine, il prezzo ed il giorno in
cui disponibile tipo se a base di pesce il pesce di venerdì)

RECIPEINGREDIENTS
(è connessa con FK a RECIPES, ITEMS e SUBITEMS poi ho aggiunto il peso
di ogni ingrediente e le calorie legate al peso di ogni ingrediente)

A questo punto dovrei fare una tabella ad hoc per le "guarnizioni" o per
i "sughi" (devo trovare il giusto termine in inglese!) qualcosa simile a
RECIPEINGREDIENTS da inserire in quest'ultima come FK magari di default
null.

Saluti.
^Bart

^Bart

unread,
Jul 15, 2021, 7:49:44 AM7/15/21
to
Ti ringrazio prima di tutto per la risposta! :)

> se ho capito bene da quello che scrivi, la prima tabella è una categoria
>  mentre la seconda un dettaglio della categoria.

Esatto ITEMS contiene tutto il materiale di un ristorante tipo latte,
bicchieri, etc. e c'è un campo booleano che indica food o nofood

Sotto ad ITEMS c'è SUBITEMS in cui si indica ad esempio latte di capra,
mucca o bicchiere di cristallo, plastica.

> se il ragionamento è questo barcode e brand non metterlo qui, ma
> utilizza una tabella separata dei "prodotti"
> la "pasta sfoglia barilla" e la "pasta sfoglia buitoni" sono "prodotti"
> appartenenti alla categoria "pasta" e sottocategoria "pasta sfoglia"
> e tra l'altro possono essere ancora suddivisi per specificità
> come peso (500 gr o 1 kg) o contenuto (senza glutine, senza grassi
> aggiunti, ecc) e ognuno ha il suo specifico barcode.
> il prodotto inteso come marca - modello - specifiche, può appartenere a
> più categoria.

Ok, però da qualche parte devo iniziare! :) Ho pensato di partire dalla
tabella ITEMS e da li sottocategorizzare.

Ho creato una tabella KINDOFRECIPES con valori come primo, secondo,
starter, etc. in varie lingue e poi una tabella TAGS con un campo
BOOLEANO per gestire la parte legata al ristorante (romatico, informale,
etc.) da quella legata alle ricette (gluten free, pasta, etc.)

La tabella RECIPES ha una FK verso KINDOFRECIPES e verso TAGS... diciamo
che non è banale questo tipo di gestione e finché si progetta
effettivamente si può rimanere quanto più larghi e lungimiranti
possibile! :)

> "barilla farina tipo 0 500gr"
> può appartenere a pasta come dolci come pizza e così via

Giusto ma infatti mettendola nella tabella ITEMS poi la vado a
richiamare nella tabella RECIPEINGREDIENTS.

> la categoria e sottocategoria la puoi fare con un unica tabella
> (categoria) e gestire le relazioni con una altra tabella n - n

Ci devo ragionare non ho ben capito...

> la categoria pasta è sia una categoria che una sottocategoria della
> categoria carboidrati.

Ok, la situazione si fa complicata! :D

> a livello di separazione dei dati
> ogni tabella deve contenere un set di informazioni omogenei che sono
> necessari alla parte più piccola del tuo progetto.

Ti ringrazio per tutte le dritte, ora devo cercare di metterle in
pratica nel modo migliore! :)

Saluti.
^Bart

Ammammata

unread,
Jul 15, 2021, 9:16:51 AM7/15/21
to
Il giorno Thu 15 Jul 2021 01:00:03p, *^Bart* ha inviato su it.comp.www.php
il messaggio news:scp4fi$1u0o$1...@gioia.aioe.org. Vediamo cosa ha scritto:

> a questo punto però come gestirla?
>

eh...
qui si deve sentire uno "bravo", io cerco solo le possibili magagne ;)

bramante

unread,
Jul 16, 2021, 3:57:41 AM7/16/21
to
Il 15/07/21 13:49, ^Bart ha scritto:
> Ti ringrazio prima di tutto per la risposta! :)
>
>
>> la categoria e sottocategoria la puoi fare con un unica tabella
>> (categoria) e gestire le relazioni con una altra tabella n - n
>
> Ci devo ragionare non ho ben capito...


la puoi fare con una sola tabella


Categoria
----------
id_categoria
cescrizione
categoria_padre


esempio:

Categoria
--------
id_categoria = 1
descrizione = Pasta
categoria_padre = null
----
id_categoria = 2
descrizione = pasta sfoglia
categoria_padre = 1


la query con mysql 8

with recursive lista_cat (id_categoria, descrizione, categoria_padre) as (
select id_categoria,
descrizione,
categoria_padre
from categoria
union all
select p.id_categoria,
p.descrizione,
p.categoria_padre
from categoria p
inner join lista_cat
on p.categoria_padre = lista_cat.id_categoria
)
select * from lista_cat;




^Bart

unread,
Jul 18, 2021, 3:38:29 AM7/18/21
to
> esempio:
>
> Categoria
> --------
> id_categoria = 1
> descrizione = Pasta
> categoria_padre = null
> ----
> id_categoria = 2
> descrizione = pasta sfoglia
> categoria_padre = 1

Rilancio... :) ma se ad esempio dovessimo memorizzare i tipi di carne,
le tipologie di latte, etc. a quel punto avremmo ridondanza di dati!

Come da me ipotizzato inizialmente volevo creare una tabella principale
chiamata ITEMS ed una SUBITEMS in modo che nella ITEMS potessi mettere
ad esempio carne, latte, pasta, etc. e nella SUBITEMS le varie tipologie.

Se mettessi tutto in un'unica tabella mi vedrei la parola latte o carne
ripetuta più volte...

> la query con mysql 8
>
> with recursive lista_cat (id_categoria, descrizione, categoria_padre) as (
>   select     id_categoria,
>              descrizione,
>              categoria_padre
>   from       categoria
>   union all
>   select     p.id_categoria,
>              p.descrizione,
>              p.categoria_padre
>   from       categoria p
>   inner join lista_cat
>           on p.categoria_padre = lista_cat.id_categoria
> )
> select * from lista_cat;

Mi segno comunque la query che può tornarmi utile! :)

Saluti.
^Bart

^Bart

unread,
Jul 18, 2021, 3:40:25 AM7/18/21
to
> eh...
> qui si deve sentire uno "bravo", io cerco solo le possibili magagne ;)

Il trovare comunque le magagne implica già una certa bravura! :)

Ho comunque deciso di fare una tabella a parte chiamata sauces dove
creare i vari sughi, guarnizioni, etc. perché ad esempio molti
ristoranti lo stesso sugo te lo propongono con diversi tipi di pasta.

Saluti.
^Bart


0 new messages