2012-04-05 50 views
1

我真的只是一個業餘愛好者,他的願望太宏大了,我說,我正在試圖找出正確的方式來創建我的數據庫,以便數據庫更改不需要客戶端重構,但也很快。請回復,好像我不太瞭解典型開發或DBA術語。MySQL數據庫設計 - 特定案例,列或附加表格?

這種情況:我試圖確定每個用戶評價了多少本書。我認爲一本書額定如果有任意兩個以下的

-Overall rating (ratings table) 
-sub rating (ratings table) 
-tag (book_tags table) 
-list (book_lists table) 

*Related tables: users, tags, lists 

問題:我有10個評級和兩個總體收視率都在額定值表中,每一列中的(猜測這很糟糕,但不確定)。我是否應該有一個收視表(12行)和一個book_ratings表,其中收視表的每一行都是用戶的評分類型?

-e.g. book_ratings: id | user_id | book_id | rating_id 

如果有,是什麼,如果有50萬本書,每本書12種分級類型,10,000個用戶,並在該book_ratings表一共有5個十億行會怎樣?這會跑超級慢嗎?另一個考慮是我可能希望在將來添加更多的子分級類型,這也是我認爲改變它可能很有價值的部分原因,但是這是很多工作,所以我想首先檢查。

謝謝!

回答

1

您應該建模您的系統以使其可用並可擴展。當你想彙總結果時,有12個評級列會給你帶來很多痛苦。在這個網站上有很多這類痛苦的例子。

因爲它的增長可以通過添加索引,聚類,數據分區等優化

但如果你知道你將有大量的數據的時候了,你可能要考慮一些「大數據」解決方案也許走NoSQL的路..

+0

任何機會,你可以指點我一些關於優化的信息?適合基本的東西?有一天,它真的放慢了速度,直到我在各種查詢中使用的所有字段都添加了索引,但即使這樣做也像一個在黑暗中漫步的盲人。理想情況下,如果情況良好,我希望擁有20萬用戶和100萬本書籍作爲數據庫的一部分(管道夢,但嘿:)。如果可能的話,我想知道如何提前計劃。 – 2012-04-06 01:56:30

+1

優化這些東西是一種黑色藝術。我不熟悉MySQL,但在SQL Server中,您可以顯示查詢的「執行計劃」 - 即服務器執行查詢所執行的操作的細節,這對於優化非常有用,對於SQL Server它甚至直接建議應該添加哪些索引。我假設MySQL有類似的東西。 – MiMo 2012-04-06 14:12:21

1

是的,我會改變你描述的結構 - 它更靈活,更「正確」(標準化)。

只有當每個用戶對所有書籍給出所有評級時,你纔會有50億行(這確實很糟糕),這似乎不太可能。絕大多數用戶不會評價任何東西,絕大多數書籍不會吸引任何評價。