Sto costruendo un'applicazione di gestione per aiutare a gestire la mia azienda di dettaglianti auto mobili (e, si spera, altri). Sto lottando per capire come modellare alcuni dati.Appuntamenti e partite singole
Questa domanda è legata ad una precedente interrogazione che ho postato, ma ho riprodotto le informazioni rilevanti di seguito: Database design - google app engine
In questa applicazione, ci sono concetti di "Appuntamenti" e "Voci di linea. "
Gli appuntamenti sono un luogo e un orario in cui ci si aspetta che i dipendenti svolgano un servizio.
Gli elementi pubblicitari sono un servizio, una commissione o uno sconto e le relative informazioni associate. Un esempio di voci che potrebbero andare in un appuntamento:
Name: Price: Commission: Time estimate Full Detail, Regular Size: 160 75 3.5 hours $10 Off Full Detail Coupon: -10 0 0 hours Premium Detail: 220 110 4.5 hours Derived totals(not a line item): $370 $185 8.0 hours
Nel mio precedente implementazione di questa applicazione, gli elementi pubblicitari sono stati contenuta da un unico appuntamento. Questo ha funzionato bene la maggior parte del tempo, ma a volte ha causato problemi. Un esempio potrebbe essere se un appuntamento venisse interrotto a metà strada a causa della pioggia e il tecnico dovesse tornare fuori il giorno successivo e finire. Questa situazione richiedeva due appuntamenti per lo stesso elemento pubblicitario. In casi come questo, vorrei solo fondere leggermente i dati impostando la "voce" sul secondo appuntamento per leggere qualcosa come "Finish Up" e quindi il costo sarebbe $ 0.
In questa prossima versione, sto considerando consentendo Articoli Linea da abbinare con più di un appuntamento con una struttura di tabella che assomiglia a questo:
Appointment
start_time
etc...
Line_Item
appointment_Key_List
name
price
etc...
Un problema generale con questa struttura è che è complicato e non sono nemmeno sicuro se è appropriato abbinare un elemento pubblicitario con più appuntamenti. Se gli elementi pubblicitari possono essere solo parte di un appuntamento, in realtà posso solo inserire un elenco di elementi pubblicitari in ogni appuntamento, quando ricevo gli appuntamenti, ricevo già gli elementi pubblicitari.
Un problema più specifico è che utilizzo il motore di app di google e se desidero eseguire una query per un insieme di appuntamenti e i relativi elementi pubblicitari associati, dovrei prima eseguire una query per l'insieme di appuntamenti e quindi eseguire un secondo eseguire una query per gli elementi pubblicitari utilizzando l'operatore IN per verificare se una qualsiasi delle chiavi dell'appuntamento Line_Item rientra nell'insieme di chiavi di appuntamento che sono state restituite dalla query precedente. La seconda query avrà esito negativo se ho più di 30 chiavi che mi richiedono di dividere la query. Potrei denormalizzare i dati per evitare questa query di lettura complicata ed estesa, e probabilmente dovrò comunque denormalizzare in qualche modo, ma preferirei evitare la complessità laddove appropriato.
La mia domanda è: come viene solitamente modellato questo tipo di situazione? È anche appropriato che un elemento pubblicitario sia abbinato a più di un appuntamento oppure è normale dividere semplicemente gli elementi pubblicitari in singoli per ogni appuntamento, ad esempio "1a metà del lavoro di 2 giorni" e "2a metà del lavoro di due giorni". ". Come fanno le simili applicazioni di successo a fare questo? Quali sono le regole pratiche in questo tipo di situazione? Quali implementazioni si sono rivelate meno problematiche?
Grazie!
Risposta molto informativa! Grazie per aver condiviso queste informazioni con SO. @DutrowLLC si prega di contrassegnare questa risposta come quella corretta, in quanto è, a mio parere, una risposta molto migliore alla tua domanda. @ Nick Johnson Le mie scuse per credere alle cose sbagliate. Grazie per aver spiegato e fornito questa bellissima risposta con ottime informazioni per tutti! – Pindatjuh
@Pindatjuh - È molto da vedere. Questo video contiene anche alcuni dettagli su come gli elenchi sono indicizzati e ricercati. Ho trovato estremamente utile la seconda parte di unire-join. Era un pdf con diapositive che puoi guardare mentre guardi il video: http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html –
Grazie per aver trovato il tempo di rispondere a questa domanda così accuratamente Spero che anche altre persone possano trovare la tua risposta e trarne beneficio. –