2011-11-20 92 views
0

我正在製作一個網站,允許用戶在桌面上註冊並記錄他們的日常活動。他們的活動將存儲在MySQL數據庫中,並將使用jQuery/PHP進行顯示。構建用於記錄用戶大量動態數據的數據庫

下面是數據類型的示例圖片存儲enter image description here

的問題是,我不知道如何正確地存儲這種類型的信息。

我原本打算爲每個用戶創建一個表,名爲$userid . "_activies"或沿着這些行的東西,列id, user_id, type, location, duration, date。然後爲了讀取數據,我會簡單地檢查他們想要的日期並加載所有符合該日期的活動。這工作正常,但我不知道如何正確更新現有的條目。

例如:在上面的圖片中,如果你想改變「廚房」行的持續時間,你將如何去檢測它是否已經存在於數據庫中?你不能簡單地在2012年11月18日檢查包含「清潔」和「廚房」的行,然後覆蓋它,因爲廚房可能在清潔部分出現多次(例如,他們在去清潔廚房後第二次清洗廚房浴室)。

我本來想過讓每個<tr>必須等於該加載它,那麼當它的時間來保存數據的數據id領域的ID,檢查排id已經存在,覆蓋它。這對我的問題似乎是一個糟糕的解決方法。

我希望能夠完全清除整天的原始數據,並在保存時使用表中包含的任何內容重寫它。只刪除表中與表的日期相匹配的每一行,然後寫入新的信息是否合理?或者有更好的方式來存儲這些信息。例如,我應該爲每個用戶每天創建一個新表嗎?這似乎很多表...

我很難過,任何人都可以分享任何想法建立數據庫的方式?

回答

2

我非常相信將數據保存在邏輯塊中。如果這意味着保持一切合乎邏輯,不要害怕使用更多的表格。僅僅基於你說我會至少有如下表:

用戶(USER_ID,USER_NAME,密碼,電子郵件,...) 位置(LOCATION_ID,LOCATION_NAME,...) 持續時間(duration_id,duration_length (在5,10或15分鐘的時間段內從最小的持續時間增加到最大的持續時間) 活動(activity_id,activity_name,activity_description,activity_user(user_id),activity_date,activity_location(location_id),activity_duration(duration_id) ...)

同樣,這是基於您的問題中描述的元素。這樣,所有內容都將存儲在Activity中,而且您顯然希望爲activity_user編制索引。您只需將活動添加到活動中,然後根據activity_user和activity_date進行顯示。希望這可以幫助。

ETA:我意識到我沒有回答你最終的問題。正如我所說的,您將在活動中輸入新的活動,並且,如果您希望只維護給定用戶的最新記錄,則只需刪除user_id的所有活動,其中activity_date不是最近的日期。提供示例代碼很困難,因爲我不確定你的意思。我希望我至少能夠正確地傳達基本知識。

+0

那麼主要問題是每天更新數據。例如,如果每一天都有自己的活動表,那麼我可以刪除整個表並用新數據重新創建它,但我不確定這是不是很好的做法,並且會創建大量的表(1每個用戶每天的表)。 – Sandoichi

+0

另外,在你的解決方案中,你會爲每個用戶創建一個單獨的活動表嗎?示例:用戶332將讀/寫表:activity_332?或者每個用戶只有一個巨大的活動表? (我認爲一張桌子會變得太大,這可能會減慢查詢的速度嗎?) – Sandoichi

+0

也許我並沒有正確理解你的問題。我不認爲每天都需要自己的桌子,除非你真的打算爲每天更新的人們繪製強硬的線條。如果用戶錯過了一兩天怎麼辦?你想讓他們回到一個完全空白的屏幕?將它們的最後一天的活動存儲到再次更新之前似乎更有意義。在這種情況下,一旦user_332登錄並記錄他12月13日的第一個活動,您可以簡單地刪除user_332的所有記錄,其中activity_date不等於12月13日。 –