1

我真的只是一个业余爱好者,抱负太远了,也就是说,我正在努力找出创建数据库的正确方法,以便数据库更改不需要客户端重构,而且速度也很快。请回答,就好像我不太了解典型的开发或 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 亿行,会发生什么?那会跑得超级慢吗?另一个考虑是我将来可能想添加更多的子评分类型,这也是我认为更改它可能很有价值的部分原因,但工作量很大,所以我想先检查一下。

谢谢!

4

2 回答 2

1

是的,我会按照你的描述改变结构——它更灵活,更“正确”(标准化)。

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

于 2012-04-05T22:35:03.680 回答
1

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

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

但是,如果您知道您将立即拥有大量数据,您可能需要考虑一些“大数据”解决方案,并且可能采用 NoSQL 方式。

于 2012-04-05T22:36:10.487 回答