gpt4 book ai didi

mysql - 考勤系统MongoDB设计

转载 作者:行者123 更新时间:2023-11-29 07:13:09 26 4
gpt4 key购买 nike

我需要设计和实现一个员工考勤系统数据库。数据库不必是非关系数据库,我可以选择最适合需求的数据库。需求很简单,我需要存储员工信息以及他们的上下类时间。

数据要求如下:

  1. 员工数量不会很多(20-50 人)。
  2. 能够检索特定日期或特定日期范围(例如一个月)内所有员工的所有出勤时间。
  3. 能够添加/修改/删除特定员工的出勤时间。
  4. 能够检索计算出的每位员工的迟到出勤率。 (根据一些与考勤时间和员工信息相关的业务规则,员工被视为迟到)。

-使用 MongoDB 比使用关系 SQL(如 mySQL)更好吗?

-最能简化数据库实现、数据访问和应用程序开发的建议数据库高层设计是什么?

最佳答案

这种设计可以通过 MongoDB 或关系数据库来实现,各有优缺点。 user641887 的模式设计对于 MongoDB 来说是一种完全有效的方法,尽管我不会使用“date”作为出勤中的“_id”,因为同一天的两名员工将具有相同的“_id”,这是无效的,我会留下 Object_id 的与会者的“_id”。然而,请注意 mongo 中集合连接的限制,因为您需要查看 '$lookup' 函数( https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/ ),该函数仅在 Mongo-3.2 中添加。 mongo设计的优点是它允许user641887提出的考勤表中的每个文档都是动态的,并且如果这个数据库变得非常大,扩展数据库应该不会太难。但我怀疑,如果只有 50 名员工,每天 1 条记录(每年 50*365 = 18250 条),那么即使 10 年的数据也很小。

上述要求也可以使用关系结构来实现,其中您将再次拥有 2 个表,如 user641887 所描述的。根据您想要在“其他属性/参数”中存储多少附加信息,您有几个选项。如果只有几个已知的可能的其他属性,那么您可以向每个表添加一些可为空的字段。但是,如果可能存在许多字段,或者您在添加它们之前不知道会发生什么,那么您可以有两个与员工关联的附加表:

员工属性:

  • employee _id :与员工 _id 匹配的 _id 代码员工表
  • attribute_code:链接到 code_description 表(如下)的整数代码
  • attribute_value:属性的值

注意:这种使用单个属性表的方法仅限于 attribute_value 仅具有一种数据类型(最有可能是字符串),但如果您需要具有多种数据类型,则可以通过为每个数据设置多个员工属性表来解决该问题类型,例如employee_attribute_i(对于整数)、employee_attribute_s(对于字符串)、employee_attribute_b(对于 bool 值)。

属性代码描述:

  • attribute_code :该属性的 int 代码
  • attribute_meaning:该属性用途的字符串描述(例如“过敏”、“缓刑”、“开始时间”等)

同样的方法可用于“其他出勤参数”。

关于“计算每个员工的迟到情况”,您可以设置触发器/规则来自动触发,可以添加到每个员工的计数器中以监控他们是否迟到。这将通过在插入参加者表时触发触发器来实现,其中 in_time 字段可以与员工的“start_time”进行比较,如果大于该值,则对记录他们迟到频率的计数器+1。我知道这可以在几个关系数据库中完成(当然是 postgres/ingres,我相信还有很多其他数据库)。我不知道是否可以在 mongo 服务器上完成。

关于mysql - 考勤系统MongoDB设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38880306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com