我試圖創建一個清單系統,例如。要收集的物品列表。用戶將能夠將列表添加到他們的個人資料,然後當他們收集項目,然後可以檢查列表中的項目框單擊提交和檢查項目現在將被標記爲收集。我有它編碼和工作正常,但它使數據庫的查詢工作量瘋狂。冗餘數據是否可以保存,如果它不需要查詢?
我有5個表格。一個用戶表(用於註冊用戶的用戶名,id..etc),一個列表表(包含列表名,說明,id),一個列表項表(包含單個項目id,title和listID它屬於))。用戶列表表(用於列表用戶已添加到他們的個人檔案userID和列表ID)和收集項目表(它具有一個人已檢查收集的列表項,列表項ID,用戶ID)
問題是什麼時候我查看mylists.php頁面,它將查詢userslist表並返回用戶添加的列表的所有ID。那麼一旦我有了列表的ID,它就會查詢列表以找出列表的名稱(這可能意味着如果我添加了10個不同的列表,則必須對列表進行10次查詢)。如果我添加一個listname列到用戶列表中,我只需要爲該頁面進行1次查詢,那就是userslists表格,我可以用那個1個查詢構建頁面。
如果允許用戶重命名列表,可以將其存儲在'userlist'表中。否則,過早優化是很多邪惡的根源,儘管它可能很有趣。 – 2013-02-23 16:54:24
這個問題並不真正相關,但'collectitems'表可以選擇'(ListID,ItemsID,UserID)'作爲列。這樣你可以執行參照完整性。您現在擁有表格的方式可能會以用戶收集屬於不在該用戶列表中的列表的項目結束。 – 2013-02-23 16:58:32