2011-06-15 38 views
9

我最近採用了Employee模型的項目,該模型需要將該人的可用小時數作爲屬性。在UI和數據庫中表示時間段

現有表單使用168個複選框來表示每週的每個小時,並將信息作爲7個24位二進制字符串存儲在數據庫中,每個位在當天的相應小時內充當布爾值true或false。

我真的想過渡到的東西多一點優雅和管理的,但我一直沒能拿出符合現有實現的靈活性,任何簡單的解決方案。

存儲時間段的開始和結束時間可以是一樣乏味的輸入時可以每天多次,並很可能使在特定的時間更復雜查詢的可用性。

在用戶界面和數據庫結構中處理這種類型的信息是否有最佳做法?

+0

PostgreSQL原生支持時間間隔作爲數據類型。 – Pointy 2011-06-15 22:06:53

+0

這絕對是很好的知道,但我不知道它真的解決了這個問題。如果我沒有弄錯,那麼這些時間間隔不會與特定的開始時間或結束時間相關聯,因此它們必須用作更復雜的數據結構的一部分來表示所有必需的信息。我想我真正想要的是一種乾淨,易於管理的方式來輸入,存儲和查詢168個布爾值。或者更好的方式來表示每週的每個小時。 – Luke 2011-06-15 22:15:34

+0

那麼你可以將一個間隔字段與一個日期字段配對,這樣日期字段會給出開始時間和間隔的持續時間。不知道這是否會比兩個日期字段更好或更差;它取決於你想運行的語義和查詢。 – Pointy 2011-06-15 22:54:04

回答

1

我會以這種方式建模數據庫中的數據。

Employee/Day/Hour Relationship

有一個許多人一週的每一天的員工和小時之間一對多的關係。

在UI方面,你可以使用的天,多選列表框複選框設置小時爲一天。

+0

這看起來像迄今爲止最有前途的方法。我最初猶豫了一週的時間以及0到23的數字,但它確實允許更簡單的方法來查詢可用性。 – Luke 2011-06-16 02:02:09

+0

第二個想法是否有利於像這樣抽出時間和日子到自己的桌子上?爲什麼不能用'hour'整數和'day'字符串替換'hour_id'和'day_id'?通過適當的驗證,它們絕不應該具有意想不到的價值,我認爲這不會從該方法中獲得任何靈活性。 – Luke 2011-06-16 02:11:24

+1

我這樣做了模型的正常化。如果您需要存儲關於時間和日期的其他描述符,則可以存儲它的空間。例如,DOW表可以具有代表數字日的int,具有星期一,星期二,星期三等的Short_Day和具有星期一,星期二,星期三等的Long_Day。小時可以具有整數小時,然後是具有12am,1am等的字符或上午12時至凌晨1點,上午1-2點等。這將通過提供各種描述符爲人類可讀性提供幫助。 – 2011-06-16 02:37:19

1

你能製作時間段嗎?

Employee 
    Availability 
    7AM -> 12PM 
     Monday 
     Tuesday 
     Wednesday 
    1PM -> 4PM 
     Monday 
     Tuesday 
    1PM -> 5PM 
     Wednesday 

每個用戶都有一個時間表的列表,它們代表一天中的一個或多個小時。每個時間塊也可以表示一週中的一天或多天。根據用戶可用性的複雜程度,可能只有很少的數據或很多數據。

如果您不想更改用戶界面,您不需要更改用戶界面,因爲您只需確定選中的複選框並構建時間段即可。如果兩個時間之間有一個或多個小時的差距,它將成爲另一個時間段。

添加Shift鍵UI :: http://imm.io/6vGk

顯示員工班次:: http://imm.io/6vGv

+0

因此,在這種情況下,會有一個單獨的有「開始時間」,「結束時間」,「天」和「user_id」列的可用性表?這可能會使數據庫看起來更容易一些,但我不相信它會使輸入或查詢更容易。 – Luke 2011-06-16 01:43:34

+0

是的,可以爲數據庫工作。至於查詢只是取決於你需要做的事情,查詢越複雜,任何事情都會變得越困難。用戶界面可以是任何你想要的東西......例如,我將在上面的答案中添加一些圖像,以說明我爲添加/顯示班次做了什麼 – CraigW 2011-06-16 16:00:23

0

我們商店僱員的時間表,並在兩個不同的表非可用小時。搜索正在建立可用時間,然後排除不可用。員工時間表的數據結構非常複雜,因爲每天的存儲時間表只是讓我們的搜索非常緩慢,而且表格很大。

相關問題