Perdonami Marino, ho dimenticato un dettaglio importantissimo. A volte capita che un piatto richiesto sia scorporato dai fornitori in diversi sottopiatti.
Esempio: Arrosto misto (11€) → il fornitore mi fa pagare i seguenti piatti (Maiale 2€, Vitello 2,5€, Salsiccia 1,5€), per un totale di 6€.
Ho usato impropriamente la parola 'sconto'.. in realtà sono pacchetti già definiti. Cioè `2+3` ha un suo costo, come `2` e come `3`. Può essere che `2+3` costi meno di `2`+`3`.
Quando scrivi affidatario.. intendi la tabella intermedia della relazione molti a molti (tra la domanda e la produzione)? Oppure è un passaggio ulteriore?
Al momento sono a questo punto (e non so se sia corretto), con dei passaggi più o meno lineari:
1) Tabella Offerte (menù)
Off_id (int, PRIMARY)
Off_nome_offerta
Off_prezzo_offerta
2) Tabella Piatti
Pia_id (int, PRIMARY)
Pia_nome_piatto
3) Tabella OffertePiatti
OffPia_id (int, PRIMARY)
Off_id (int, KEY)
OffPia_id (int, KEY)
4) Tabella ChiCucina
Cc_id (int, PRIMARY)
Cc_nome
Cc_telefono
...
5) Tabella Produzione (servizio per piatti scomposti)
Prod_id (int, PRIMARY)
OffPia_id (int, KEY)
Prod_chi_cucina (int KEY)
Prod_nome_piatto
Prod_costo_piatto
6) Tabella Ordinazione
Ord_id (int, PRIMARY)
Prod_id (int, KEY)
Ord_prezzoApplicato*
[*] Non è molto logica la cosa.. ma imponendo immediatamente il costoApplicato mi evito di dover ricontrollare tramite le date quale era il costo di listino, il giorno che venne fatta l'ordinazione. In effetti è un metodo ortodosso, però mi evita di eseguire altre operazioni e controlli in funzione delle date (datatype che trovo spesso estremamente rognoso). Magari in seguito, quando avrò ben presente lo schema generale, questo passaggio potrei 'rivederlo'.
Andando a fare una simulazione:
Tabella Offerte:
1, Antipasto, 7€
2, Risotto, 8€
3, Cotoletta, 10€
4, Contorno, 4€
5, Cotoletta+Contorno, 12€
6, ArrostoMisto, 11€
Tabella Piatti:
1, Antipasto
2, Risotto
3, Cotoletta
4, Contorno
5, ArrostoMisto
6, Porzione maiale di ArrostoMisto
7, Porzione manzo di ArrostoMisto
8, Porzione salsiccia di ArrostoMisto
Tabella OffertePiatti:
1, 1, 1 (→ antipasto, di antipasto)
2, 2, 2 (→ risotto, di risotto)
3, 3, 3 (→ cotoletta, di cotoletta)
4, 4, 4 (→ contorno, di contorno)
5, 5, 3 (→ cotoletta di cotoletta+contorno)
6, 5, 4 (→ contorno di cotoletta+contorno)
7, 6, 5 (→ arrosto misto)
8, 6, 6 (→ porzione maiale, di arrosto misto)
9, 6, 7 (→ porzione manzo, di arrosto misto)
10, 6, 8 (→ porzione salsiccia, di arrosto misto)
Tabella ChiCucina:
1, Ristorante, ...
2, CateringTizio, ...
3, CateringSempronio, ...
Tabella Produzione:
1, 1, 1, Antipasto, 2€
2, 2, 1, Risotto, 3€
3, 2, 2, RisottoTizio, 4.5€
4, 2, 3, RisottoSempronio, 5€
5, 3, 1, Cotoletta, 4€
6, 3, 2, CotolettaTizio, 6€
7, 3, 3, CotolettaSempronio 5.5€
8, 4, 1, Contorno, 1.5€
9, 4, 3, ContornoSempronio, 2.5€
10, 5, 1, Cotoletta (di Cotoletta+Contorno), 4€
11, 5, 3, CotolettaSempronio (di Cotoletta+Contorno), 5€
12, 6, 1, Contorno(di Cotoletta+Contorno), 2.5€
13, 6, 3, ContornoSempronio (di Cotoletta+Contorno), 2€
14, 7, 1, ArrostoMisto, 5€
15, 8, 2 ,Porzione maiale (di arrosto misto) Tizio, 2€
16, 9, 2, Porzione manzo (di arrosto misto) Tizio, 2,5€
17, 10, 2, Porzione salsiccia (di arrosto misto) Tizio, 1,5€
18, 7, 3, ArrostoMistoSempronio, 7€
Tabella Ordinazioni:
.....
Il problema di questa mia progettazione è che alcuni piatti vengono ripetuti, ma in realtà sono gli stessi (cambia solo il prezzo). Vedi la cotoletta o il contorno di Sempronio.. avrebbero 2 id differenti, mentre invece sono la stessa produzione, ma con prezzo variato. Io vorrei mantenere sempre lo stesso id per ogni piatto, e gestire i prezzi separatamente.
Per questo ti dicevo, come gestire il caso in cui il ristorante prende un ordine (ad esempio l'arrosto misto) a cui applica il corrispettivo id, ma si accorge che manca la carne per cucinarlo e deve girare l'ordine a Sempronio (lui lo scorpora in 3 sottopiatti, quindi non più un solo id, ma 3 differenti id). Quindi nella tabella ordinazioni non avrò più una sola riga ma 3.
O viceversa, il ristorante sceglie in primis il catering Sempronio, che poi respinge l'ordine perché ha finito la carne, quindi deve prepararsela di per sè.. da 3 rows passiamo ad 1.
Credo che il problema sia molto complesso, e non trovo una strada valida per strutturarlo.
Puoi darmi qualche consiglio?