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

Databasemodel for en 24/7 personaleliste på et kasino

Tak fordi du brugte tid på at sammensætte et kvalitetsspørgsmål. Dine krav er store, og dine specifikationer for dit system er meget detaljerede. Jeg var i stand til at oversætte dine specifikationer til en grafdatamodel for Neo4j. Se nedenfor.

Ovenfor kan du se en ret forklarende grafdatamodel. Hvis du ikke er bekendt med dette, foreslår jeg at læse Graph Databases:http://graphdatabases.com/ -- Denne hjemmeside kan du få en gratis digital PDF-kopi af bogen, men hvis du ønsker at købe en papirkopi, kan du finde den på Amazon.

Lad os nedbryde grafmodellen på billedet. Øverst vil du se en tidsindekseringsstruktur, der er (År)->(Måned)->(Dag)->(Time), som jeg har forkortet til Y M D H. Ellipserne indikerer, at grafen fortsætter, men af hensyn til pladsen på skærmen har jeg kun vist en undergraf.

Dette tidsindeks giver dig en måde at generere tidsserier eller stille bestemte spørgsmål om din datamodel, der er tidsspecifikke. Meget nyttigt.

Den nederste del af billedet indeholder din virksomhedsdatamodel for dit casino. Noderne repræsenterer dine forretningsobjekter:

  • Spil
  • Tabel
  • Medarbejder
  • Færdighed

Det gode ved grafdatabaser er, at du kan se på dette billede og semantisk forstå sproget i dit spørgsmål ved at hoppe fra en node til en anden efter deres relationer.

Her er en Cypher-forespørgsel, du kan bruge til at stille dine spørgsmål om datamodellen. Du kan bare justere det lidt for at matche dine spørgsmål.

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

Ovenstående forespørgsel finder undergrafen for alle medarbejdere, der har evnen Blackjack og deres bord og placering på en bestemt dato (17.1.14).

At gøre dette i SQL ville være meget svært. Den næste ting du skal tænke på er at importere dine data til en Neo4j-database. Hvis du er nysgerrig efter, hvordan du gør det, så se venligst på andre spørgsmål her på SO, og hvis du har brug for mere hjælp, er du velkommen til at stille et andet spørgsmål eller kontakte mig på Twitter @kennybastani.

Skål,

Kenny




  1. SQL Firewalling gjort let med ClusterControl &ProxySQL

  2. Solr-søgning med Mysql Database, ethvert værktøj til dataimport

  3. Sådan udføres opdateringsoperationer på kolonner af typen JSONB i Postgres 9.4

  4. MySQL:Henter ID, hvor præcis 2 rækker deler det samme ID, men har forskellige bruger-ID'er