2011-03-19 77 views
3

我想知道我的方法在這裏是否不正確MySQL在兩個數據庫之間共享表格

我有一個簡單的網站,您可以註冊。它有一個名爲USERS的主數據庫,該數據庫有一個包含所有用戶列表的表格,然後爲每個新用戶生成一個名爲DB1,DB2,...,DBn的新數據庫。我這樣做的原因是因爲每個用戶都存儲了很多信息,我認爲這會是一個更好的方法。但是,現在我遇到了問題,即用戶數據庫需要訪問USERS數據庫中的表(針對外鍵),我無法弄清楚如何執行該操作。我承認我沒有太多的MySQL經驗,所以這可能是一個非常糟糕的決定,爲每個用戶創建一個新的數據庫。是這樣嗎? MySQL的效率如何?例如,我可以爲(假設)100,000個用戶創建一個列表,其中每個用戶還有100個條目,可以說他們已經上傳了圖片。

謝謝

回答

2

這是一個非常糟糕的設計決定。你想要做的是爲這個應用程序中的所有表創建一個單一的數據庫。在你的例子中,你將有一個數據庫(稱之爲MyProject)。您將擁有一個用戶表,將其稱爲User,其中包含您的所有用戶條目 - 100,000個條目是用於現代硬件的小型數據庫,因此請不要擔心。然後你將得到一個名爲UserPhoto的表格,其中包含User中主鍵的引用以及任何其他你需要的數據。

+0

這不會太難轉換。出於好奇,桌子大小對搜索速度有什麼影響?例如,如果我有一張照片評論表,那麼假設有100,000個用戶,每個用戶1000張照片,每張照片100個評論,當找到特定的子集時,會出現100,000 * 1000 * 100個條目來搜索。歡呼 – puk 2011-03-19 21:50:10

+0

表格大小會影響搜索速度,是的。但是,索引做的是讓每個查詢都不會掃描所有100,000 * 1000 * 100行。它使用某種方法(取決於實現)以顯着較低的成本執行對數據的查找。再次,對於現代數據庫來說,100,000/1000/100結構相對較小。正確放置索引,你會沒事的。 – Bleaourgh 2011-03-19 21:59:13

1

可以使用語法

db_name.table_name.table_field 
5

我也在考慮同樣的問題,使數據庫之間的查詢。我發現的解決方案:http://drupal.org/node/37075

您可以在每個數據庫中創建代表您的常見USERS表的VIEW。

mysql> use DB1; 
mysql> CREATE VIEW users AS 
mysql> SELECT * 
mysql> FROM USERS.users 
相關問題