0

場景:數據庫架構設計員工休假制度

一名員工累計從他們所從事的日期ň數每月天數。不同的員工類別每月有不同的天數,例如高級員工可能有權享受2.5天的待遇,而初級員工可能有權享受2.0天的優惠待遇&實習生爲期1.75天。

當員工被提升爲從初級到高級時,他們的月休假權利也應該改變,但是他們的累計假期總額應該說明該類別的變化。即如果一個初級員工工作兩個月(2.0 /月),並在第三個月晉升爲高級職員(利率現在變爲2.5 /月),那麼計算累計假期總數的最佳方法是什麼?

如果統一稅率是統一的,我不會有任何問題計算員工類別變化時積累的日子。這裏員工類別可以在他們的任職期間隨時更換。

這種情況下最好的模式設計如何?

回答

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」跟蹤使用過休假,並從應計休假中減去。

希望這有助於讓一些想法滾動!