就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。
9年前关闭。
我想开发员工打卡和下类系统(网站)。
我担心两件事:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| password | varchar(50) | NO | | NULL | |
| hourly_rate | decimal(6,2) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
+----------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| staff_id | int(11) | NO | | NULL | |
| clock_in_date | datetime | NO | | NULL | |
| clock_out_date | datetime | NO | | NULL | |
+----------------+----------+------+-----+---------+----------------+
最佳答案
伙计,你在这里打开了多么庞大的蠕虫 jar 头。在一家只做时钟系统的公司工作后,我再也不想做这件事了!
我意识到我的回答非常概念化,并解决了问题正常范围之外的一些问题,但这是为了概述此类应用程序中的数据库设计和结构概念。这些信息也来自我最近在该领域所做的专家开发,因此它不仅是假设的,而且在实践中得到了证明。
当您查看这种类型的系统时,最好最初使用指标作为标志,这通常是比较每条记录的出拳次数。比较 1,000 名员工的每条记录并不是最好的事情!
例如,如果用户在 24 小时内有 8 次打卡(一天开始、早上休息开始、早上休息结束、午餐开始、午餐结束、下午休息开始、下午休息结束和一天结束),您可以确定它不太可能在此期间没有错过打卡并且发生了加类,但是如果在 24 小时内有 7 次打卡(一天开始、早间休息开始、早间休息结束、午餐开始、午餐结束、下午休息开始和结束)一天)您知道缺少一拳并且该人忘记了当天的打卡时间。注意下午休息结束是如何不存在的。
但是,这不是完全证明,仅提供指示性引用,您需要将轮类计划与打卡进行比较,以确保实际上没有遗漏任何内容。因为午餐结束和下午休息结束都可能错过,留下 6 次打卡,您可以设置代码以标记该员工打卡次数不是 X 次的任何内容。当被标记时,您然后对该员工在那段时间进行实际比较,以确定实际发生了什么以及遗漏了什么。
这并不意味着您不比较所有记录,而是取决于员工数量,对每条记录进行精确比较可能会导致一些大问题,这通常更适合使用大量员工2 台服务器,1 台仅用于数据收集和接口(interface),第二台用于运行比较过程。
正如我所提到的,对于这种类型的应用程序并使用不同的时间表,您还需要查看等待轮类时间表以进行比较。您将希望为每个员工保留一个填充记录,以便在轮类开始之前和轮类结束之后提供相同的时间。这意味着加类超过 1 个时间段的可能性将很小。基本公式非常简单:类次的小时数 - 24 小时/2 = 时间填充
现在,您可以在该用户的轮类计划之前和之后放置时间填充。但是您仍然需要处理换类、换类或超过 24 小时的类次。这是它真正变得棘手的地方。您将需要查看一份重叠时间(填充、轮类和打卡)的表格,然后可以根据 future 对时间表的任何调整进行协调,因为事后更改在考勤中并不少见。
现在您还需要保存病假和假期缺勤时间表,然后需要在打卡/打卡表中对这些数据进行一般标记,因为这是您比较的内容。当为一段时间设置标志时,可以跳过比较记录并在报告上留下注释,而无需运行额外的操作来检查它。
几乎在最后,请注意您如何需要忘记正常的日期/时间约定来衡量一系列变量?更不用说在多个日期有效和高效地工作了?因此,您通常最好只使用 dd/mm/YYYY hh:mm:ss 的开始和结束时间,因为测量使用 UNIX 时间来计算已经过去了多少时间。说到可审计,大多数系统确实需要“日期戳”记录,因此在发布报告时可能需要服务器端处理。
最后,我还建议持有一个结果表,这将为每个用户提供报告结果,这样当您想提供历史记录时,您可以动态生成文档,但您不必每次都浪费处理能力来比较记录要求提交报告。
我希望这有帮助!
关于mysql - 数据库设计 - 员工打卡和下类系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9584659/
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co