Mysql
 sql >> Base de données >  >> RDS >> Mysql

Modèle de base de données pour une liste de personnel 24h/24 et 7j/7 dans un casino

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