Děkujeme, že jste věnovali čas sestavení kvalitní otázky. Vaše požadavky jsou skvělé a vaše specifikace vašeho systému jsou velmi podrobné. Podařilo se mi převést vaše specifikace do grafického datového modelu pro Neo4j. Viz níže.
Nahoře uvidíte poměrně vysvětlující datový model grafu. V případě, že s tím nejste obeznámeni, doporučuji přečíst si Graph Databases:http://graphdatabases.com/ -- Na této webové stránce můžete zdarma získat digitální kopii knihy ve formátu PDF, ale v případě, že si chcete koupit tištěnou kopii, najdete ji na Amazonu.
Rozeberme si model grafu na obrázku. Nahoře uvidíte časovou indexovou strukturu, která je (Rok)->(Měsíc)->(Den)->(Hodina), kterou jsem zkrátil jako Y M D H. Elipsy ukazují, že graf pokračuje, ale kvůli prostoru na obrazovce jsem ukázal pouze dílčí graf.
Tento časový index vám umožňuje generovat časové řady nebo klást určité otázky týkající se vašeho datového modelu, které jsou časově specifické. Velmi užitečné.
Spodní část obrázku obsahuje váš podnikový datový model pro vaše kasino. Uzly představují vaše obchodní objekty:
- Hra
- Tabulka
- Zaměstnanec
- Dovednost
Na databázích grafů je skvělé to, že se můžete podívat na tento obrázek a sémanticky porozumět jazyku vaší otázky přeskakováním z jednoho uzlu do druhého podle jejich vztahů.
Zde je dotaz Cypher, který můžete použít k položení dotazů na datový model. Můžete jej jen mírně upravit, aby odpovídal vašim otázkám.
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
Výše uvedený dotaz najde podgraf pro všechny zaměstnance, kteří mají dovednost Blackjack, a jejich stůl a umístění k určitému datu (17. 1. 2014).
Udělat to v SQL by bylo velmi obtížné. Další věc, na kterou musíte myslet, je import vašich dat do databáze Neo4j. Pokud jste zvědaví, jak to udělat, podívejte se na další otázky zde na SO a pokud potřebujete další pomoc, pošlete další otázku nebo mě kontaktujte na Twitteru @kennybastani.
Na zdraví,
Kenny