规划数据库的正确方法

时间:2011-12-05 23:11:08

标签: sql-server-2008 database-design

我正在创建一个音乐分享网站,因此每个用户都可以设置他的帐户,添加歌曲等。

我想添加用户根据他们是否喜欢这首歌给彼此分数的能力。

例如,user1在他的收藏中有一些歌曲,user2喜欢一首歌,所以他点击“我喜欢”,导致给user1一个点。

现在我想知道我在数据库中创建“点数表”的想法是否正确和正确。

我决定创建一个单独的表来保存关于点的数据,这个表会有id列,谁给了谁,歌词id列,日期列等等。我担心的是在我的表中我会有一行对于已经给出的每一个点。

当然拥有所有这些具体信息真好,但我不确定这是否是正确的方法,或者我可能浪费资源,空间......等等。

也许我可以重新设计我的歌曲Table以获得额外的列点,我只计算每首歌有多少分。

我需要一些建议,也许我不应该真的担心我的设计,优化和可扩展性,因为今天的技术是如此快速和强大,数据库查询是即时的快速..

2 个答案:

答案 0 :(得分:3)

IMO,最好使用交易表来跟踪基于他们的歌曲列表给予用户的点数。考虑Stackoverflow(SO)的工作原理,如果您对问题或解决方案进行投票,您可以在以后删除您的投票,如果SO使用求和列,则无法支持此类功能。

我不会太担心积分表中的行数,因为它可能非常狭窄,慷慨;最多10列。更不用说该表将是用户之间的数据透视表,因此将主要包含int值。

答案 1 :(得分:1)

部分问题非常简单。如果您需要知道

  • 谁给了一个观点
  • 向谁
  • 为哪首歌
  • 在哪个日期

然后你需要记录所有这些信息。

不是那么简单吗?

如果需要知道总数,那么您只需存储总计。

至于比例,假设您有20,000个用户,每个用户平均有200首歌曲。让我们说十分之一得到任何投票,平均每首歌30。这是400万用户歌曲;获得投票的400,000,每首歌30,你有1200万行。那并不是那么多。如果表格中的行数太多,则对“向谁”进行分区会加快速度。