Grazie per aver dedicato del tempo a mettere insieme una domanda di qualità. Le tue esigenze sono ottime e le specifiche del tuo sistema sono molto dettagliate. Sono stato in grado di tradurre le tue specifiche in un modello di dati grafico per Neo4j. Vedi sotto.
Sopra vedrai un modello di dati grafico abbastanza esplicativo. Nel caso tu non abbia familiarità con questo, ti suggerisco di leggere Graph Databases:http://graphdatabases.com/ -- Da questo sito web puoi ottenere una copia digitale gratuita del libro in PDF, ma nel caso in cui desideri acquistarne una copia cartacea puoi trovarla su Amazon.
Analizziamo il modello grafico nell'immagine. In alto vedrai una struttura di indicizzazione temporale che è (Anno)->(Mese)->(Giorno)->(Ora), che ho abbreviato come Y M D H. I puntini di sospensione indicano che il grafico sta continuando, ma per motivi di spazio sullo schermo ho mostrato solo un sottografico.
Questo indice temporale ti offre un modo per generare serie temporali o porre determinate domande sul tuo modello di dati che sono specifiche del tempo. Molto utile.
La parte inferiore dell'immagine contiene il tuo modello di dati aziendali per il tuo casinò. I nodi rappresentano i tuoi oggetti aziendali:
- Gioco
- Tabella
- Dipendente
- Abilità
La cosa fantastica dei database di grafi è che puoi guardare questa immagine e comprendere semanticamente il linguaggio della tua domanda saltando da un nodo all'altro in base alle loro relazioni.
Ecco una query Cypher che puoi utilizzare per porre domande sul modello di dati. Puoi semplicemente modificarlo leggermente per adattarlo alle tue domande.
MATCH (employee:Employee)-[:HAS_SKILL]->(skill:Skill),
(employee)<-[:DEALS]-(game:Game)-[:LOCATION]->(table:Table),
(game)-[:BEGINS]->(hour:H)<-[*]-(day:D)<-[*]-(month:M)<-[*]-(year:Y)
WHERE skill.type = "Blackjack" AND
day.day = 17 AND
month.month = 1 AND
year.year = 2014
RETURN employee, skill, game, table
La query precedente trova il sottografico per tutti i dipendenti che hanno l'abilità Blackjack e il loro tavolo e posizione in una data specifica (17/01/14).
Fare questo in SQL sarebbe molto difficile. La prossima cosa a cui devi pensare è importare i tuoi dati in un database Neo4j. Se sei curioso di sapere come farlo, dai un'occhiata alle altre domande qui su SO e se hai bisogno di ulteriore aiuto, sentiti libero di pubblicare un'altra domanda o contattami su Twitter @kennybastani.
Ciao,
Kenny