Tack för att du tog dig tid att ställa en kvalitetsfråga. Dina krav är stora och dina specifikationer för ditt system är mycket detaljerade. Jag kunde översätta dina specifikationer till en grafdatamodell för Neo4j. Se nedan.
Ovan ser du en ganska förklarande grafdatamodell. Om du inte är bekant med detta föreslår jag att du läser Graph Databases:http://graphdatabases.com/ -- På den här webbplatsen kan du få en gratis digital PDF-kopia av boken, men om du vill köpa en papperskopia kan du hitta den på Amazon.
Låt oss bryta ner grafmodellen i bilden. Överst ser du en tidsindexeringsstruktur som är (År)->(Månad)->(Dag)->(Timme), som jag har förkortat till Y M D H. Ellipserna indikerar att grafen fortsätter, men för utrymmets skull på skärmen har jag bara visat en undergraf.
Detta tidsindex ger dig ett sätt att generera tidsserier eller ställa vissa frågor om din datamodell som är tidsspecifika. Mycket användbart.
Den nedre delen av bilden innehåller din företagsdatamodell för ditt kasino. Noderna representerar dina affärsobjekt:
- Spel
- Tabell
- Anställd
- Färdighet
Det som är bra med grafdatabaser är att du kan titta på den här bilden och semantiskt förstå språket i din fråga genom att hoppa från en nod till en annan efter deras relationer.
Här är en Cypher-fråga som du kan använda för att ställa dina frågor om datamodellen. Du kan bara justera det lite för att matcha dina frågor.
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
Ovanstående fråga hittar underdiagrammet för alla anställda som har kompetensen Blackjack och deras bord och plats på ett specifikt datum (1/17/14).
Att göra detta i SQL skulle vara mycket svårt. Nästa sak du behöver tänka på är att importera dina data till en Neo4j-databas. Om du är nyfiken på hur du gör det, titta på andra frågor här på SO och om du behöver mer hjälp, ställ gärna en annan fråga eller kontakta mig på Twitter @kennybastani.
Skål,
Kenny