赌场 24/7 员工名册的数据库模型

2023-11-30

我们目前使用基于笔/纸的名册来管理赌场的桌面游戏工作人员。每行代表一名员工,每列代表 20 分钟的时间段,每个单元格代表员工被分配到的表,或者他们被分配到休息时间。员工轮班的开始和结束时间各不相同,他们可以处理的游戏/技能也各不相同。我们需要将名册副本保留 7 年,使用纸张这相当容易,我想开发一个数字应用程序,但在如何将数据存储在数据库中进行存档方面遇到困难。

我对使用数据库相当陌生,我想我了解如何为像 Neo4j 这样的图形数据库建模数据,但在处理时间方面我遇到了困难。我尝试了解 MySQL 等 RDBMS 数据库,下面是我认为应该如何建模数据。请指出我是否走错了方向或者不同的数据库类型更合适,我们将不胜感激!

基本数据
在我们考虑日程安排/时间之前,这里有一些需要使用的基本数据。

Employee
- 身份证号
- Name
- 技能(二十一点、百家乐、轮盘赌等)

Table
- 身份证号
- 技能/类型(只能是一种技能)

将名册数据存储为 JSON 之类的文件可能会更好?那么时间敏感的数据就不是什么大问题了。使用数据库进行数字化的好处是查询,这些可以帮助协助完成人为错误常见的耗时任务。

可能的查询
注意:轮班的员工要么在休息,要么在地板上(分配到一张桌子上),技能根据学习难度分为主要或次要类型。

  • 哪些员工在现场工作了 80 分钟或更长时间? (他们该休息了)
  • 我可以根据该员工的技能将他们分配到哪些开放表?
  • 我需要一名具有百家乐技能但尚未分配到百家乐牌桌的员工。
  • 这段时间内这张桌子上有哪些员工?
  • 该员工此时在哪里?
  • 现在谁在值班?
  • 有多少值班人员可以玩二十一点?
  • 有多少员工拥有3项主要技能?
  • 哪些员工拥有百家乐技能至少 3 个月?

这些查询也可以按字母顺序或时间、技能等排序。

我很确定我知道如何使用 Neo4j 的 cypher 执行这些查询,前提是我对数据进行了正确的建模。我对 SQL 查询不太了解,我读过它可能会变得有点复杂,具体取决于查询和结构。

-------------------------------------------------- --------------------------------------

MYSQL 特定

员工表可以包含诸如 ID 号和姓名之类的属性,但我是否正确,对于他们的技能和轮班,这些将是通过唯一整数引用员工的单独表(我认为这称为外键?)。

另一个表可以存储游戏表,这些表有自己的 ID 并使用外键引用技能/游戏类型。

为了记录像笔/纸花名册这样的数据,每天可以有一个表格,其中的列从 0000 开始增加 20 的值一直到 2340?在时间列之前,我可以为员工设置一个,其中每个员工都用他们的外键表示,然后时间列将具有分配的游戏表的外键,行数据必然有许多未填充的单元格,因为员工轮班不会是 24/7。如果我使用外键来引用游戏桌,那么当员工休息时我会遇到问题吗?除非我将第一个游戏桌条目视为休息?

不过,我可能需要使事情进一步复杂化,随着时间的推移,管理层将尝试不同的游戏桌布局,一些游戏桌可以从二十一点转换为百家乐。这种情况在 7 年内肯定会发生很多次,我是否想要创建新的游戏表条目或添加一列以使用外键并引用存储一段时间内游戏类型历史记录的新表?员工在职业生涯中还将学习如何处理新游戏,但很少有人会失去这项技能。

-------------------------------------------------- --------------------------------------

Neo4j 特定

有了这些数据,我是否会有一个 Employee 和一个 Table 节点,它们具有映射到实际员工或表的“isA”关系边? 我想对于这两种类型的技能,我最好使用技能节点并建立这样的关系?:Blackjack->isA->Skill,Employee->hasSkill->Blackjack,Table->typeIs->Blackjack?

TIME
当我希望这个数据库现在使用时间线时,我发现很困难。我遇到了以下将节点与时间连接起来的建议:

  • Unix Epoch 似乎是一个常见的推荐?
  • 将节点连接到年/月/日图?
  • 卢森时间表? (我对此不太了解或如何使用它,见过一些人提到它)

以及时间和数据如何关联的一些案例:

  • 员工的工作日和开始/结束时间每周都有所不同,这可能是具有属性 {shiftStart,shiftEnd,actualStart,actualEnd} 的轮班节点,员工可能会迟到或在轮班期间生病。这是将每个班次与员工联系起来的正确方法吗?员工(节点)->班次(组节点)->班次(节点)

  • 表和人员可能已修改技能数据,对于存档数据这可能是一个问题,我认为解决方案是在与技能的关系上具有时间属性?

  • 我们全天打开和关闭桌子,每个桌子每天都有打开/关闭时间,这可能会根据管理层的要求在一个月内发生变化,此外时间并不严格,出于各种原因经理可能会打开或关闭桌子轮班期间。表节点的打开/关闭状态可能只与轮班期间的查询相关,这让我很困惑,因为我希望它用于查询,但对于随着时间的归档可能没有意义?

通过查询,我很难决定何时使用节点或向节点添加属性。对于员工来说,他们有姓名和身份证号码,如果我想通过身份证号码找到员工,将其作为自己的节点会更好吗?这会更直接,而不是通过所有员工来查找唯一的 ID 号。

我最近也遇到过标签,我可以理解这些标签对于输入员工和表节点而不是将它们分组在节点下很有用。对于员工的轮班,我认为应该继续与轮班节点分组,如果我要对在某个时间段内轮班的员工进行密码查询,则标签可能是合适的,但是它应该应用于单个轮班节点还是切换链接回员工的组节点?我可能需要向各个轮班节点或与轮班组节点的关系添加属性?我不确定是否应该有一个轮班组节点,我假设减少连接到员工节点的边对于查询来说是最佳的。

-------------------------------------------------- --------------------------------------

如果有任何关于数据库开发的好资源,那就太好了,那里有太多的信息和选项,很难知道从哪里开始。谢谢你的时间 :)


感谢您花时间提出高质量问题。您的要求很高,并且您的系统规格非常详细。我能够将您的规范转换为 Neo4j 的图形数据模型。见下文。

Casino Employee Graph Data Model

在上面您将看到一个相当解释性的图形数据模型。如果您对此不熟悉,我建议您阅读图数据库:http://graphdatabases.com/-- 在这个网站上,您可以获得该书的免费数字 PDF 副本,但如果您想购买硬拷贝,您可以在亚马逊上找到它。

让我们分解图像中的图形模型。在顶部,您将看到一个时间索引结构,即(年)->(月)->(日)->(小时),我将其缩写为 Y M D H。省略号表示该图是连续的,但是为了屏幕上的空间,我只显示了一个子图。

此时间索引为您提供了一种生成时间序列或针对特定时间的数据模型提出某些问题的方法。很有用。

图像的底部包含您赌场的企业数据模型。节点代表您的业务对象:

  • Game
  • Table
  • Employee
  • Skill

图形数据库的优点在于,您可以查看此图像,并通过它们的关系从一个节点跳转到另一个节点,从语义上理解问题的语言。

这是一个 Cypher 查询,您可以使用它来询问有关数据模型的问题。您可以稍微调整它以匹配您的问题。

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

上面的查询查找所有拥有 Blackjack 技能的员工的子图以及他们在特定日期 (1/17/14) 的牌桌和位置。

在 SQL 中做到这一点是非常困难的。您需要考虑的下一件事是将数据导入 Neo4j 数据库。如果您对如何做到这一点感到好奇,请查看此处的其他问题,如果您需要更多帮助,请随时发布另一个问题或通过 Twitter @kennybastani 与我联系。

Cheers,

Kenny

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

赌场 24/7 员工名册的数据库模型 的相关文章

  • 如何在没有聚合函数的情况下在sql server中创建枢轴查询

    我正在使用 MS SQL SERVER 2008 并且有以下数据 select from account PERIOD ACCOUNT VALUE 2000 Asset 205 2000 Equity 365 2000 Profit 524
  • 如何删除实体框架6中的多对多关系

    如果将项目连接为多对多关系 则从数据库中删除项目时会出现问题 我的数据库看起来像 Project lt JobInProject gt Job ProjectID JobInProjectID JobID ProjectID JobID 主
  • Laravel 中的 SQL 运算符是什么?

    我正在查看 Laravel 的源代码 发现了很多 Eloquent 的 SQL 运算符 我想知道其中一些是什么以及如何使用它们 不幸的是我没有找到任何文档 这是我找到的运营商vendor laravel framework src Illu
  • 有什么方法可以在MySQL中的表名位置使用变量吗?

    我想在表名称位置使用变量 例如 SELECT FROM targetTableName 然而它会出错 有什么方法可以在MySQL中的表名位置使用变量吗 您显示的查询不起作用有两个原因 插入到查询中的用户定义变量将被视为使用字符串文字 而不是
  • Access 2013 SQL 中的转换和透视

    如何使用 TRANSFORM 和 PIVOT 函数从第一个表获取第二个表 TABLE 01 Config ID ConfigField ConfigValue 11 Name Basic 11 Version 1 01 11 Owner J
  • 用于桌面数据库应用程序的 Python 框架

    是否有一个框架可以为Python开发桌面数据库应用程序 一些带有CRUD屏幕的屏幕 我正在寻找类似于 Windows 窗体的东西 能够将 TextField Combos 和其他 UI 隐喻与datasets连接到关系数据库例如 MySQL
  • HANA 列表/显示表 SQL 命令

    如何通过 SQL 显示 列出 SAP HANA 中的所有表 SAP HANA 通过系统表提供数据库目录 就像大多数其他 DBMS 一样 TABLES https help sap com saphelp hanaplatform helpd
  • 如何将map或json对象存储为neo4j中的属性?

    我正在尝试将地图或 json 对象存储为 Neo4j 中的属性 但它不起作用 这是目前节点属性的限制 您有几种解决方法可供选择 您可以将 json 对象转换为字符串并将其保存为属性 您可以使用APOC程序 https neo4j com l
  • SQL Server 2008 中的 FREETEXT 查询不进行短语匹配

    我在 SQL Server 2008 中有一个全文索引表 我正在尝试使用 FULLTEXT 查询精确的短语匹配 我不认为使用 CONTAINS 或 LIKE 适合于此 因为在其他情况下查询可能不准确 用户没有用双引号括起短语 并且一般来说我
  • 如何设置 Hibernate 读取/写入不同的数据源?

    使用 Spring 和 Hibernate 我想写入一个 MySQL 主数据库 并从基于云的 Java Web 应用程序中的另一个复制从属数据库中读取数据 我找不到对应用程序代码透明的解决方案 我真的不想更改我的 DAO 来管理不同的 Se
  • 导入mysql数据库出错

    我导出我的数据库并导出到另一台计算机使用 phpmyadmin 但它错误 静态分析 分析过程中发现2处错误 意想不到的角色 靠近位置 53 的 无法识别的语句类型 位置 1 的 div 附近 SQL查询 div class error h1
  • QGIS 和 PostGIS(地图点(美国地图上的纬度和经度以及半径)

    我安装了QGIS和PostGIS 我想在美国地图上以 100 英里为半径显示 200 个点 我已将纬度和经度导入 PostGIS 数据库中 所以我有三个字段 地址 纬度 经度 1 我需要将纬度和经度字段转换为点或几何字段吗 如果是这样怎么办
  • 在评论中查找不同风格的日期

    我还有一个问题要问preg match 我有一个表 其中评论的日期写在评论本身内 手动 现在我需要提取该日期并将其放置在不同的列中 我发现评论和日期的样式如下 id warning sent warning date 6109 2011 0
  • SQL最近的命令?微软SQL

    我只是编写一个查询来查看我的客户数据库并列出他们下了多少订单等 我正在努力添加到此查询中的是只显示该电子邮件的最新 OrderID 有任何想法吗 这是我的查询 select top 1000 BuyerEMail COUNT HowMany
  • 使用实体框架创建临时表

    我想使用实体框架在 SQL Server 中创建临时表 我有什么办法可以做到这一点吗 如果我可以创建临时表 我的下一个问题是 如何读取它 提前致谢 Andr 好吧 所以你不喜欢存储过程路线 说实话我也不喜欢 但这是我能想到的最快的方法 基于
  • 自定义 Sql Server 对象资源管理器右键单击菜单项

    如何在 Sql Server 2012 的对象资源管理器中添加或自定义右键菜单项 例如 我想将新项目添加到表右键菜单中以生成自定义表创建器脚本 您可以编写一个 SSMS 加载项 See http sqlblogcasts com blogs
  • 有没有适用于 Eclipse 的 SQL 格式化插件?

    我在网上没有找到任何标准的开源 sql 格式化程序 eclipse 插件 我正在使用日食太阳神 我可以找到编辑 gt 格式化SQL但这似乎不起作用 找到一个在http ventralnet blogspot in 2010 11 sql b
  • phpMyAdmin - #1932 重新安装后表不存在(正在使用排序规则)

    我正在做我的论文 当我发现我的 XAMPP 服务器有一些错误日志时 所以我决定将我的 XAMPP 重新安装到更新的版本 我从 SO 中的一些线程中得 到了这个想法 我移动了我的mysql gt data文件夹并在我的新安装文件夹中再次恢复它
  • 自动递增和最后插入 ID

    我在用着AUTO INCREMENT我想获取插入行的 ID 以便我可以使用更新另一个表ID作为两个表之间的公共字段 我明白LAST INSERT ID会排在最后ID 然而 我担心的是 数据库被许多用户同时访问 因此 可能有另一个进程访问该表
  • 关于mysql建表的几个问题

    CREATE TABLE favorite food person id SMALLINT UNSIGNED food VARCHAR 20 CONSTRAINT pk favorite food PRIMARY KEY person id

随机推荐