Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Modelo de banco de dados para uma lista de funcionários 24 horas por dia, 7 dias por semana em um cassino


Obrigado por dedicar seu tempo para fazer uma pergunta de qualidade. Seus requisitos são grandes e as especificações do seu sistema são muito detalhadas. Consegui traduzir suas especificações em um modelo de dados gráfico para o Neo4j. Veja abaixo.



Acima, você verá um modelo de dados gráfico bastante explicativo. Caso você não esteja familiarizado com isso, sugiro a leitura de Graph Databases:http://graphdatabases.com/ -- Neste site você pode obter uma cópia digital gratuita do livro em PDF, mas caso queira comprar uma cópia impressa, pode encontrá-la na Amazon.

Vamos detalhar o modelo de gráfico na imagem. No topo, você verá uma estrutura de indexação de tempo que é (Ano)->(Mês)->(Dia)->(Hora), que abreviei como Y M D H. As reticências indicam que o gráfico continua, mas por uma questão de espaço na tela, mostrei apenas um subgráfico.

Esse índice de tempo oferece uma maneira de gerar séries temporais ou fazer certas perguntas em seu modelo de dados que são específicas de tempo. Muito útil.

A parte inferior da imagem contém seu modelo de dados corporativos para seu cassino. Os nós representam seus objetos de negócios:
  • Jogo
  • Tabela
  • Funcionário
  • Habilidade

O que é ótimo sobre bancos de dados de gráficos é que você pode olhar para esta imagem e entender semanticamente a linguagem de sua pergunta pulando de um nó para outro por seus relacionamentos.

Aqui está uma consulta Cypher que você pode usar para fazer suas perguntas sobre o modelo de dados. Você pode apenas ajustá-lo um pouco para corresponder às suas perguntas.
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

A consulta acima encontra o subgráfico para todos os funcionários que possuem a habilidade Blackjack e sua mesa e local em uma data específica (17/01/14).

Para fazer isso em SQL seria muito difícil. A próxima coisa que você precisa pensar é importar seus dados para um banco de dados Neo4j. Se você estiver curioso sobre como fazer isso, veja outras perguntas aqui no SO e, se precisar de mais ajuda, sinta-se à vontade para postar outra pergunta ou entrar em contato comigo no Twitter @kennybastani.

Saúde,

Kenny