是的,我會說這是對設計乾淨數據庫的規則,你有數據重複,因此你必須積極維護兩套數據在所有時間害怕他們不同步。如果你不這樣做,你不能相信這些數據。 :)
作爲一個方面說明:你說你出於性能原因這麼做?你看到了什麼好處?不管你從哪個表訪問數據,你都應該找到(使用合適的索引),它們之間幾乎沒有什麼區別?這可能是你在這裏修正了錯誤的問題,也許還有其他事情要先看看(如索引,改進你的查詢等)。
編輯:選擇免費的字符應該是很容易的,你會得到從用戶表擺脫character_id
的,只有在人物一個user_id
:
Users: user_id, name, age
Characters: character_id, shape, user_id
那麼你就能夠做到一些像這些查詢:
//something like this to query for free characters.
SELECT * FROM characters WHERE user_id IS NULL;
// To access a list of a users characters, you could do something like this:
SELECT * FROM characters WHERE user_id = 42;
// More information about the user, while still grabbing character info.
SELECT * FROM characters AS c INNER JOIN users AS u ON u.user_id = c.user_id WHERE u.user_id = 42;
或者是有更多關於您的模型,我可能錯過了這個? (因爲我不假裝知道你的數據庫佈局;))。我假設一對多的關係,因爲它似乎是這樣的(一個用戶可以有很多字符)。
爲什麼你需要將兩張桌子分開? – 2010-03-31 16:24:16
有無限數量的字符和用戶!它們並不相同,用戶必須在字符數據庫中搜索並找到他喜歡的一個! – EBAG 2010-03-31 16:25:15