【问题标题】:SQL timetable for employee员工的 SQL 时间表
【发布时间】:2010-04-25 15:33:35
【问题描述】:

我需要创建一个员工轮班数据库。所以到目前为止我有 3 个表,employee、employee_shift 和 shift

我想计算一个员工在月底做了多少班次,我的问题是,因为一个月有 30 天,有些有 28 天和 31 天。

这意味着我需要在班次表中创建 31 个不同的变体?每个月的每一天一个?为了计算出哪个员工工作得最多?

在我的业务关系中,它说员工每天有 1 或 2 个班次,因此我必须有 60 行不同的变化吗?我是对的,或者有一个简单的方法来解决它

【问题讨论】:

    标签: sql shift timetable


    【解决方案1】:

    我会像这样使用三个表:

    Employee - EmployeeId, EmployeeName etc.
    ShiftRecords - ShiftRecordId, EmployeeId, InTime, OutTime
    Shift - ShiftId, ShiftStartTime, ShiftEndTime
    

    如果轮班时间可能会有所不同,您可以在轮班表中包括轮班开始日期和结束日期以及 IsActive 列。

    【讨论】:

    • 您能否创建一个选择语句来显示某个月班次最高的员工
    【解决方案2】:

    我还会坚持三个表,Employee、Shifts 和 Employee_InOut。最后一个表将包含日期、时间和时间的列。上班时间和下班时间将是找出员工正在轮班的关键。因此,我可以只计算一个月的轮班次数以及员工的轮班详细信息。会很简单。

    【讨论】:

    • 没有。你不 - 你应该找人帮你设计,因为如果你尝试一个 60 字段的表,那么你基本上是试图设计一个 sql 数据库的盲人。请公司里的人来帮助你。了解 SQL 基础知识的人。然后学习;)
    • 回到 RDBMS 和规范化的基础。放置这么多字段会限制您的灵活性,只会增加许多倍的复杂性。
    【解决方案3】:
    1. 您不能将数据插入到 TimeStamp 列中。请改用时间。
    2. 您不能将 Emp_Id 和 Shift_Id 作为主键,因为这样会重复。如果您确实需要主键,请添加另一列,例如 Shift_Record_Id。

    就创建脚本而言,它应该很简单。您只需要弄清楚一个逻辑并阅读我们可以在其中使用的 select 语句和可用关键字。

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多