不知道你的應用程序的細節太多了,我會說你最好的方式來組織你的數據是讓你的表的每個記錄對應每個員工的一個「衝入/衝出」。從那裏,計算每個員工在特定時間段內的工作時間將是非常微不足道的。我沒有弄錯,這聽起來很像你如何描述你的第二個例子中的數據(減去Status
列)。
在最簡單的例子,你的表將有以下欄目:
UID (INT or uniqueidentifier)
ClockIn (datetime)
ClockOut (datetime)
當員工主頻,你會插入一行到表中針對該員工,並把時鐘的時間下ClockIn
欄。
UID ClockIn ClockOut
-------------------------------------------
1 2012-10-30 12:00:00.000 NULL
作中,他們將分別獲得一個排
UID ClockIn ClockOut
-------------------------------------------
1 2012-10-30 12:00:00.000 NULL
2 2012-10-30 1:00:00.000 NULL
3 2012-10-30 2:00:00.000 NULL
每個員工時鐘當員工鍾了,你的應用程序應該檢索該員工的現有記錄,並UPDATE
行通過設置ClockOut
列到時鐘輸出時間。
UID ClockIn ClockOut
-------------------------------------------
1 2012-10-30 12:00:00.000 NULL
2 2012-10-30 1:00:00.000 2012-10-30 3:30:00.000
3 2012-10-30 2:00:00.000 NULL
如果僱員時鐘出來,再後來返回,他們將給予就像他們那一天早些時候打卡的新紀錄。
UID ClockIn ClockOut
-------------------------------------------
1 2012-10-30 12:00:00.000 NULL
2 2012-10-30 1:00:00.000 2012-10-30 3:30:00.000
3 2012-10-30 2:00:00.000 NULL
2 2012-10-30 4:30:00.000 NULL
希望,在這一點上,你應該能夠看到這個簡單的數據模型,如何有足夠的靈活性,允許大部分的標準時間保持功能。
- 您可以確定
ClockOut
爲NULL誰是尋找行主頻在
- 你可以有某種形式的處理過程時empoyees忘記衝出來
- 編輯拳員工是時鐘或晚了。
- 你可以做的
ClockOut
的每一行的一個DATEDIFF
和ClockIn
,結果
在這個例子中,大部分用於驗證數據的責任會求和確定每個員工的總工作小時稍後在您的應用程序中發生。你不會希望有人多次打鐘,或者如果他們還沒有實際打出時間,可以嘗試打鐘。