我真的只是一个业余爱好者,他的抱负太过宏伟,说,我试图找出创建数据库的正确方法,以便数据库更改不需要客户端重构,但也很快。请回复,好像我不会很好地理解典型的开发或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亿行,会发生什么?那会跑得超慢吗?另一个考虑因素是我可能希望将来添加更多的子评级类型,这也是我认为改变它可能有价值的部分原因,但这是很多工作,所以我想先检查一下。
谢谢!
答案 0 :(得分:1)
是的,我会改变你描述的结构 - 它更灵活,更'正确'(标准化)。
只有当EACH用户对所有书籍给出所有评级时,你才会有50亿行(这确实很糟糕),这似乎不太可能。绝大多数用户不会评价任何内容,绝大多数图书都不会吸引任何评级。
答案 1 :(得分:1)
您应该对系统进行建模,使其可用且可扩展。当您想要汇总结果等时,有12个评级列会给您带来很多痛苦。这个网站上有很多这类痛苦的例子。
随着它的增长,您可以通过添加索引,群集,数据分区等进行优化。
但如果你知道你将立即获得大量数据,你可能会想要考虑一些“大数据”解决方案,也许会采用NoSQL方式......