Mysql
 sql >> Database >  >> RDS >> Mysql

Modello di database per un elenco del personale 24 ore su 24, 7 giorni su 7 in un casinò

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