Merci d'avoir pris le temps de poser une question de qualité. Vos exigences sont grandes et les spécifications de votre système sont très détaillées. J'ai pu traduire vos spécifications en un modèle de données graphique pour Neo4j. Voir ci-dessous.
Ci-dessus, vous verrez un modèle de données graphique assez explicatif. Au cas où vous ne seriez pas familier avec cela, je vous suggère de lire Graph Databases :http://graphdatabases.com/ -- Ce site Web vous permet d'obtenir une copie numérique PDF gratuite du livre, mais si vous souhaitez acheter une copie papier, vous pouvez la trouver sur Amazon.
Décomposons le modèle de graphe dans l'image. En haut, vous verrez une structure d'indexation temporelle qui est (Année)->(Mois)->(Jour)->(Heure), que j'ai abrégé en Y M D H. Les ellipses indiquent que le graphique continue, mais par souci d'espace sur l'écran, je n'ai montré qu'un sous-graphique.
Cet index temporel vous permet de générer des séries chronologiques ou de poser certaines questions sur votre modèle de données qui sont spécifiques au temps. Très utile.
La partie inférieure de l'image contient votre modèle de données d'entreprise pour votre casino. Les nœuds représentent vos objets métier :
- Jeu
- Tableau
- Employé
- Compétence
Ce qui est génial avec les bases de données de graphes, c'est que vous pouvez regarder cette image et comprendre sémantiquement le langage de votre question en sautant d'un nœud à l'autre par leurs relations.
Voici une requête Cypher que vous pouvez utiliser pour poser vos questions sur le modèle de données. Vous pouvez simplement le modifier légèrement pour qu'il corresponde à vos questions.
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 requête ci-dessus trouve le sous-graphique pour tous les employés qui ont la compétence Blackjack et leur table et emplacement à une date spécifique (1/17/14).
Faire cela en SQL serait très difficile. La prochaine chose à laquelle vous devez penser est d'importer vos données dans une base de données Neo4j. Si vous êtes curieux de savoir comment faire, veuillez consulter d'autres questions ici sur SO et si vous avez besoin de plus d'aide, n'hésitez pas à poster une autre question ou à me contacter sur Twitter @kennybastani.
Bravo,
Kenny