Bedankt dat je de tijd hebt genomen om een kwaliteitsvraag samen te stellen. Uw eisen zijn groot en uw specificaties van uw systeem zijn zeer gedetailleerd. Ik heb je specificaties kunnen vertalen naar een grafisch datamodel voor Neo4j. Zie hieronder.
Hierboven ziet u een redelijk verklarend grafiekgegevensmodel. Als je hier niet bekend mee bent, raad ik aan om Graph Databases te lezen:http://graphdatabases.com/ -- Op deze website kun je een gratis digitale PDF-kopie van het boek krijgen, maar als je een papieren exemplaar wilt kopen, kun je het vinden op Amazon.
Laten we het grafiekmodel in de afbeelding opsplitsen. Bovenaan zie je een tijdindexeringsstructuur die is (Jaar)->(Maand)->(Dag)->(Uur), die ik heb afgekort als Y M D H. De ellipsen geven aan dat de grafiek doorloopt, maar omwille van de ruimte op het scherm heb ik alleen een subgrafiek getoond.
Deze tijdindex geeft u een manier om tijdreeksen te genereren of bepaalde vragen over uw datamodel te stellen die tijdspecifiek zijn. Erg handig.
Het onderste gedeelte van de afbeelding bevat uw bedrijfsgegevensmodel voor uw casino. De knooppunten vertegenwoordigen uw bedrijfsobjecten:
- Spel
- Tabel
- Medewerker
- Vaardigheid
Het mooie van grafische databases is dat je naar deze afbeelding kunt kijken en de taal van je vraag semantisch kunt begrijpen door van het ene knooppunt naar het andere te springen op basis van hun relaties.
Hier is een Cypher-query die u kunt gebruiken om uw vragen over het gegevensmodel te stellen. Je kunt het een beetje aanpassen aan je vragen.
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
De bovenstaande zoekopdracht vindt de subgrafiek voor alle werknemers die de vaardigheid Blackjack hebben en hun tafel en locatie op een specifieke datum (1/17/14).
Om dit in SQL te doen zou erg moeilijk zijn. Het volgende waar u aan moet denken, is het importeren van uw gegevens in een Neo4j-database. Als je benieuwd bent hoe je dat moet doen, kijk dan bij andere vragen hier op SO en als je meer hulp nodig hebt, kun je een andere vraag stellen of contact met me opnemen op Twitter @kennybastani.
Groetjes,
Kenny