2010-01-06 53 views
2

我目前正在開發一款遊戲,而前一段時間我開始着手加載和保存。MySQL - 保存和加載

我一直在想,但我真的不能決定,因爲我不知道哪個更有效率。

我的第一個選項: 當用戶註冊時,只有一條記錄被插入(到'字符'表中)。當用戶嘗試登錄時,並且在他/她成功完成之後,服務器將嘗試加載用戶的所有信息(跨多個表單獨分開,並通過mysql'LEFT JOIN'進行組合),但它會運行所有的信息,並將它們應用到實體實例,如果它運行到NULL(這意味着信息不在數據庫中),它會自動使用默認值。 保存時,它會插入或更新,以便在加載時生成的任何默認值現在將被保存。

我的第二個選項: 只需在註冊時插入所有必需的行(註冊完成後從網站插入行)。

下降到第一個選項:無用的檢查用戶是否已經登錄一次,因爲所有表將在首次登錄後生成。

上升到第一個選項:如果刪除表中的任何記錄,它將插入默認數據而不是踢選手,說它的字符信息已損壞/丟失。

第二種選擇的缺點:它可能會浪費一點內存,因爲所有的表格都是在註冊時插入的,並且可能會有垃圾郵件機器人以及甚至無法上網的人。

上升到第一個選項:我們不必檢查服務器中的任何東西。

我還注意到,第一個選項可能會搞砸任何搜索系統(通過admincp,如果我們嘗試查找特定用戶)。

+0

你會提供一些關於你在談論什麼樣的信息的細節嗎?哪些數據來自這些其他表格? – ErikE 2010-01-16 19:36:55

回答

7

我會去第二個選項,將默認行添加到您的用戶帳戶,並將主用戶表標記爲不完整。這將保持整個數據庫的數據完整性,而每個用戶記錄都是完整的。如果你需要刪除記錄,你可以簡單地添加一個級聯刪除腳本來清理房子。

此外,我不會開發您的數據架構的基礎上創建帳戶的惡意機器人。如果您擔心用戶帳戶的完整性,請在解決方案中添加某種數據驗證或自動清理內容腳本,以便在符合特定條件(即創建的滿足特定閾值的日期)後清除不完整的帳戶。

+0

另一個好處是,你不需要擔心代碼其餘部分丟失記錄。隨着第一個問題,你可能會遇到各種特殊情況。 – 2010-01-19 05:50:46

0

您提到,每個用戶都有多個數據表,其中一些表可以有一個默認值。我猜這是設置了類似主要的「角色」表,用戶名,密碼和電子郵件,以及一個單獨的表,如「網站最喜愛的快捷方式」,如果他們沒有指定個人偏好,它默認爲「個人資料,遊戲列表,遊戲類別」等基本列表。

然後問題就變成註冊時,應該爲該用戶默認添加最喜歡的快捷方式的顯式副本,或者使用空值默認爲默認列表?

我建議它取決於輔助數據表的性質;特別是這些表的默認值。多少次違約會改變?如果默認更改頻繁,則像第一個選項那樣的設置會導致只有「基本」條目的用戶經常會獲得新的輔助數據,而那些指定了自己條目的用戶會保留其首選項。使用第二個選項,如果默認值已更改,爲了保持用戶更新,必須執行搜索/替換才能將舊默認條目更改爲新默認條目。

另一個建議是再看看你的數據庫結構。你沒有提到你當前的表格佈局是如何設置的;有沒有辦法讓所有的LEFT JOIN表都沒有,只有一個'characters'表?