Va bene, so che sembra complicato, ma tutte le relazioni sono, lemme, chiarire. Bene, ho tre entità nel mio database che sono legate l'una all'altra in una serie di relazioni, l'app è per ristoranti e le tabelle sono le seguenti:
Customers Id Name Email
Packages Id Name ImageUrl Price Description Products (One package may have 1 to many products)
Products Id Name ImageUrl Price Description
Orders Id CustomerId Address
L'unica tabella in più menzionata è solo per chiarimenti, in quanto il cliente può effettuare un ordine. Ecco, ora le relazioni sono definite come segue:
- Il cliente può effettuare più ordini, un ordine è associato a un solo cliente, uno a molti (questo è per chiarimenti)
- Un pacchetto può contenere più prodotti, un prodotto può appartenere a più pacchetti (considerare pacchetti come offerte in un ristorante, come le offerte hanno gli stessi articoli / prodotti che il ristorante già offre), molti a molti
- Un ordine può contenere più prodotti, un prodotto può avere più ordini, molti a molti
- Un ordine può contenere più pacchetti, un pacchetto può avere più ordini, molti a molti
Gli ultimi tre sono i principali su cui dobbiamo concentrarci, ora la cosa è come progettare questo nel database. Come per molti a molti, utilizzeremo tabelle di riferimento o relazioni, come per es. nel caso di pacchetti e prodotti, è possibile creare una tabella package_products e questo è tutto bene, siamo pronti a portare il costo della query alla nuova tabella in cambio di una buona metodologia. E lo stesso deve essere fatto per la tabella ordini e prodotti, una nuova tabella order_products che soddisfa le loro esigenze molti-a-molti. Inoltre, lo stesso vale per le due entità, ordini e pacchetti, va tutto bene. Ma ora, dal lato delle query, dobbiamo ottimizzarlo, come già esistono le soluzioni, quella che ho menzionato, puoi avere qualcosa di simile, quello che voglio è qualcosa di meglio.
Se voglio, ad es. ottenere i dettagli di un ordine, che può avere molti pacchetti e prodotti allo stesso tempo, dovrà interrogare la tabella degli ordini, quindi la tabella di riferimento per gli ordini e i prodotti per ottenere singoli prodotti, quindi dovrà interrogare separatamente la tabella di riferimento per ordini e pacchetti per ottenere i pacchetti in esso. Detto questo, e al momento buono, ma se avete notato, i pacchetti sono fatti di prodotti, quindi in pratica gli ordini stanno memorizzando le informazioni per un gruppo di prodotti alcuni dei quali facevano parte di un pacco / pacchetto e l'altro , bene no. Mentre apriamo i pacchetti in un ordine, finiamo praticamente per ritrovare la stessa tabella di prodotto, una sorta di movimento posteriore del cerchio. Domande:
- Anche questa tecnica è pessima? Ho iniziato a pensarlo così
- Come posso evitare questo se è?
- Come evitare infine il costo aggiuntivo della query, nella tabella del pacchetto ordini e così via?
- È la tecnica che mette un ID di pacchetto in più nella tabella order_products male, se no che cosa sarebbe chiamata questa relazione ternaria ed è anche permessa?
Grazie in anticipo per leggere e rispondere con la grande virtù della pazienza.