2011-04-01 94 views
0

我想爲數據庫中的用戶存儲最近5天的統計數據。我腦海中有兩種類型的db表格設計。需要數據庫表格設計幫助

設計1:

id  user_name stats 
1  Peter  54    //Day 1 stats for Peter 
2   Peter  50    //Day 2 stats for Peter 
3   Abc   10    //Day 1 stats for Abc 
4   Peter  55    //Day 3 stats for Peter 
5   Abc   14    //Day 2 stats for Abc. 

設計2:

id user_name day1 day2 day3 day4 day5 
1 Peter  54  50  55  -  - 
2  Abc  10  14  -  -  - 

使上述2個比較好? 因爲我只想要的統計數據,所以只有最近5天,這就是爲什麼我想在添加新的一天時覆蓋最早的日期統計數據,以便在任何時候有最多5天的統計數據。 請告訴我應該怎麼做。

回答

2

設計1是遠遠優於。如果您決定要在未來錄製更多天,則不需要編寫另一組查詢來獲取此數據。我認爲你打算在設計1中有一個「日」欄?爲什麼沒有一個日期時間字段,用於指示一天像這樣:

id user_name  day   stats 
1  Peter   31-Mar-2011 54 
2  Peter   01-Apr-2011 24 
3  Abc   01-Apr-2011 23 

然後你就可以在自己方便的清除數據。 id主鍵字段僅用於簡化在查詢/更新中使用的行標識。

0

我喜歡這個更多:

ID用戶名

1  0  54  1  //Day 1 stats for Peter 
2  0  50  2  //Day 2 stats for Peter 

表用戶

id Name 
0 Peter 

如果您想添加或刪除更多天,您不必更改表格定義。

對於速度,你可以創建和指數用戶ID

0

設計1更好,但它並不接近。

在設計1,你可以查詢,如

select user_name, avg(stats) as average from user group by user_name order by avg(stats) 

在設計2,涉及彙總數據,尋找最小或排序將是非常麻煩的最好的任何查詢。

另外,有一天您可能會決定存儲過去7天而不是5天的數據,而在Design 2中,您必須更改數據庫定義。

0

我認爲你應該只是製作更多的表格「stats」表格。

我有類似的東西在我的腦海:

tbl_users

ID USER_NAME

1 Peter 
2  Abc 

tbl_stats

id num_tbl_users_id value 
1 1     50 
2 1     53 
3 1     54 
4 2     51 

,然後就調整您的SQL查詢以僅檢索最後5條記錄。

SELECT tbl_users.user_name, tbl_stats.value 
FROM tbl_users 
INNER JOIN tbl_stats ON tbl_users.id = tbl_stats.num_tbl_users_id 
WHERE tbl_users.id = 1 
ORDER BY tbl_stats.id DESC LIMIT 5; 
-1

第二張桌子上的設計工作效率高於第一張,因爲第二張設計很容易管理。天和用戶,也首先設計也看起來像複雜後插入一些記錄...

+0

四月愚人,methinks? Mehopes? – 2011-04-01 12:19:06

+0

今天很享受.......... – ravi 2011-04-01 12:27:53