MySQL数据库设计 - 特定案例,列或附加表?

时间:2012-04-05 22:25:38

标签: mysql database

我真的只是一个业余爱好者,他的抱负太过宏伟,说,我试图找出创建数据库的正确方法,以便数据库更改不需要客户端重构,但也很快。请回复,好像我不会很好地理解典型的开发或DBA术语。

情况:我试图确定每个用户评分的图书数量。我认为一本书被评为是否以下任何两个

-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  

如果是,如果在book_ratings表上有500k书籍,每本书12种评级类型,10,000名用户和总共50亿行,会发生什么?那会跑得超慢吗?另一个考虑因素是我可能希望将来添加更多的子评级类型,这也是我认为改变它可能有价值的部分原因,但这是很多工作,所以我想先检查一下。

谢谢!

2 个答案:

答案 0 :(得分:1)

是的,我会改变你描述的结构 - 它更灵活,更'正确'(标准化)。

只有当EACH用户对所有书籍给出所有评级时,你才会有50亿行(这确实很糟糕),这似乎不太可能。绝大多数用户不会评价任何内容,绝大多数图书都不会吸引任何评级。

答案 1 :(得分:1)

您应该对系统进行建模,使其可用且可扩展。当您想要汇总结果等时,有12个评级列会给您带来很多痛苦。这个网站上有很多这类痛苦的例子。

随着它的增长,您可以通过添加索引,群集,数据分区等进行优化。

但如果你知道你将立即获得大量数据,你可能会想要考虑一些“大数据”解决方案,也许会采用NoSQL方式......