情境:
员工从参与之日起每月积累 n 天数。不同的员工类别每月有权享有不同的天数,比如高级员工可能有权获得2.5天,而初级员工可能有权获得2.0天和更长时间。实习生1.75天。
当员工晋升时,从初级到高级说他们的月假权利也应该改变,但他们的累积假期总数应该考虑到类别的变化。即如果一名初级员工工作两个月( 2.0 /月),并且在第三个月晋升为高级职员(费率现在变为2.5 /月),那会是什么?是计算累积假期总数的最佳方法吗?
如果整体利率是统一的,那么在计算员工类别变化时积累的天数时,我不会有任何问题。在这里,员工类别可以在其工作期间的任何时间从一个变为另一个。
这种情况的最佳架构设计如何?
答案 0 :(得分:1)
假设您有员工表
+--------------+
| employee |
+==============+
| employee_id |
+--------------+
| more rows... |
+--------------+
然后,您可能有一个单独的表来跟踪开始日期和结束日期的资历级别更改,其中end_date = null表示员工当前处于该资历级别。
+--------------+
| level_events |
+==============+
| event_id |
+--------------+
| employee_id |
+--------------+
| level_id |
+--------------+
| start_date |
+--------------+
| end_date |
+--------------+
您需要一张表格来将资历水平与请假费率相关联。
+-------------+
| level_rates |
+=============+
| level_id |
+-------------+
| rate |
+-------------+
从这里开始,有一百万种不同的方式,这取决于你的编程语言和风格。
基本上,你需要类似下面的伪代码:
SELECT * FROM level_events INNER JOIN level_rates ON level_id
WHERE employee_id = <the employee in question>
var months = 0
var leave = 0
var month_interval = 30 * 24 * 60 * 60 // days * hours * minutes * seconds
for Row in Results
if (end_date == null)
end_date = NOW()
date_diff = end_date - start_date
months = date_diff / month_interval
leave += months * rate
return leave
当然,您还需要一个像“leave_used”这样的表来跟踪已使用的假期,并从累积的假期中扣除它。
希望这有助于获得一些想法!