說你有你的員工表
+--------------+
| 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」跟蹤使用過休假,並從應計休假中減去。
希望這有助於讓一些想法滾動!