ehm ... su mysql mica esiste il boolean (o per lo meno fino alla 5.5.12 non esiste) e per avere un campo con 2 o più stati in modo efficiente solitamente si usa un ENUM (mysql assegna ad ogni stringa un valore e poi usa quello nell'archivio dati così lo si vede come stringa ma internamente è un valore numeri che è più rapido da confrontare/ricercare e soprattutto consuma meno spazio)
un flag "in_uso" non risolve il problema
La logica deve essere che i record non devono MAI essere eliminati tramite DELETE, piuttosto fai una query di UPDATE impostando un flat eliminato su Si (o su 0 se fai un tinyint), flag che usi per filtrare i risultati che estrai quando mostri il menù a video (mostri solo i record che hanno il flag a no filtrando tramite il WHERE).
Con questo banale sistema tu esegui un'eliminazione del dato non a livello fisico, ma a livello logico.
Nel contempo, questo ti permette di mostrare SEMPRE il nome/descrizione associato.
Addirittura ti direi, per risolvere proprio il problema alla base, di usare una logica di "revisioni", ogni modifica non aggiorna il record del menù bensì ne inserisce uno nuovo ad hoc.
I record "precedenti" avranno un flag "storico" (enum si/no oppure tinyint 1/0) messo su si per indicare che sono storici e non ti interessano mentre il record nuovo non avrà un flag storico.
Con una logica di questo tipo non devi preoccuparti più di nulla, l'ordinazione sarà legato a quel specifico menù che c'era in quel dato periodo.
Ti dico questo perché oltre al prezzo potrebbero variare gli ingredienti, il nome ed altro e quindi faresti vedere, nello storico delle ordinazioni, cose errate.
Quindi puoi fare una tabella menù, ad esempio, così:
- menu_id - INT(10) UNSIGNED PRIMARY KEY AUTOINCREMENT
- menu_storico - ENUM('Si','No')
- menu_titolo - VARCHAR(255)
- menu_descrizione - TEXT
- menu_prezzo - DECIMAL(10,2) UNSIGNED
- menu_eliminato - ENUM('Si','No')
Quando viene fatta una modifica effettui una UPDATE per impostare nel record corrente il flag menu_storico su Si e poi viene effettuato un nuovo inserimento con il flag menu_storico su No.
La tabella delle ordinazioni, invece, la fai così:
- ordinazione_id - INT(10) UNSIGNED PRIMARY KEY AUTOINCREMENT
- ordinazione_menu_id - INT(10) UNSIGNED INDEX (magari fai una foreign key verso menu_id)
- ordinazione_quantita - TINYINT(255)
- ordinazione_prezzo_totale - DECIMAL(10,2)
- ordinazione_data - DATETIME
Lo so che può sembrare una logica "complessa" però questo meccanismo ti permette, con semplicità perché di complesso non c'è nulla, di gestire tutto perfettamente e di dare sempre i dati corretti a video!