2011-02-09 67 views
0

說我在我的網站有幾個註冊用戶。如何設置MySQL表隨時間變化跟隨變量?

用戶都保存在單個表「用戶」指派爲他們中的每一個唯一的ID。

我希望讓我的用戶跟蹤他們的開支,驅動里程,溫度等

我不能肯定每個用戶將永遠爲所有跟蹤的輸入變量的值,當他們登錄 - 所以一個可能發生的例子是:

'example data' 
user  date   amount miles  temp etc 
1  3/1/2010  $10.00 5   54 
2  3/1/2010  $20.00 15   
1  3/12/2010    5   55 
1  3/15/2010 $10.00 25  51 
3  3/20/2010      45 
3  4/12/2010 $20.00 10  54 

什麼是最好的方式來設置我的表的這種情況?

我應該在註冊時創建一個專屬於每個用戶的表嗎?

'user-1 table' 
date   amount miles  temp etc 
3/1/2010  $10.00 5   54 
3/12/2010    5   55 
3/15/2010 $10.00 25  51 

'user-3 table' 
date   amount miles  temp etc 
3/20/2010      45 
4/12/2010 $20.00 10  54 

and so on... 

應創建一個表,其基本上與上述相同的例子中的數據(可能成千上萬用戶獨佔的表的結束)? (最終可能需要梳理一個巨大的表,以查找具有所需用戶標識的行)。

'user data table' 
user  date   amount miles  temp etc 
1  3/1/2010  $10.00 5   54 
2  3/1/2010  $20.00 15   
1  3/12/2010    5   55 
1  3/15/2010 $10.00 25  51 
3  3/20/2010      45 
3  4/12/2010 $20.00 10  54 

有什麼建議嗎?

回答

1

數據庫被建立作爲一組來處理類似的數據一起。

你想要的是一個單一的用戶數據表,在由USER_ID同一個表拆分多個用戶。您可能要進一步規範,雖然,所以它存儲:

user  date   type  units 
1  3/1/2010  dollars 10.00 
1  3/1/2010  miles  5 
1  3/1/2010  temp  54 
2  3/1/2010  dollars 20.00 
2  3/1/2010  miles  15   
1  3/12/2010 miles  5 
1  3/12/2010 temp  55 
etc 

甚至進一步,如果用戶+日期做出具體的行程

trip-table 
tripid user  date 
========= ======== ========= 
1   1  3/1/2010 

type-table 
typeid description 
========= ============ 
1   dollars 
2   miles 
etc 

trip-data 
tripid  type  units 
========= ======== ======= 
1   1   10.00 
1   2   5 
etc 

然而,如果你永遠(或幾乎總是)以輸入的形式顯示數據,並在所有輸入列(比如電子表格)上顯示數據,那麼爲了簡潔,可編程性和性能,您最好堅持使用非標準化表單。

可以與需要進行梳理,以找到的用戶ID的

假設你使用索引的正確和明智地行一個巨大的表來結束,現代RDBMS在建造時,處理巨大的數據量。索引允許查詢只查找它需要的數據,所以通常將它們全部保存在一個表中是沒有什麼損失的。

1

沒有,只是創造一切可能可空領域的一個表。如果用戶沒有填寫該參數 - 那麼只需在那裏保存NULL值。

最終可能與需要梳理,以找到行的巨大的表的用戶ID的

是的,查詢將足夠快,你是否會爲user_id字段中指定的索引(對於類似WHERE user_id = 42查詢)

+0

謝謝zerkms - 當創建表時,我應該把NULL作爲默認的變量,如金額,英里等? – pepe 2011-02-09 02:57:29

+0

@imcl:是的,但似乎我沒有正確理解你的問題。至少我認爲是這樣的:-S – zerkms 2011-02-09 02:59:44