2012-04-05 52 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亿行(这确实很糟糕),这似乎不太可能。绝大多数用户不会评价任何东西,绝大多数书籍不会吸引任何评价。