【问题标题】:The right way to plan my database规划数据库的正确方法
【发布时间】:2011-12-06 07:47:37
【问题描述】:

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

我想添加一个功能,让用户可以根据他们是否喜欢这首歌互相打分。

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

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

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

当然很高兴拥有所有这些特定信息,但我不确定这是否是正确的方法,或者我正在浪费资源、空间......等等。

也许我可以重新设计我的歌曲表以增加列点数,然后我会计算每首歌曲的点数。

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

【问题讨论】:

    标签: sql-server-2008 database-design


    【解决方案1】:

    IMO,最好使用事务表来跟踪根据用户的歌曲列表给予用户的分数。考虑 Stackoverflow (SO) 的工作原理,如果您对问题或解决方案进行投票,您可以稍后删除您的投票,如果 SO 使用汇总列,则无法支持此类功能。

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

    【讨论】:

    • 对 SO 的引用太棒了,这正是我想象的方式。
    【解决方案2】:

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

    • 谁给了分数
    • 给谁
    • 哪首歌
    • 在哪一天

    那么您需要记录所有这些信息。

    是不是很简单?

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

    至于规模,假设您有 20,000 个用户,每个用户平均有 200 首歌曲。假设 10 人中有 1 人获得任何赞成票,平均每首歌 30 人。那是 400 万首用户歌曲; 400,000 人获得选票,每首歌 30 人就有 1200 万行。那不是很多。如果表中的行太多,按“对谁”进行分区会大大加快速度。

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      相关资源
      最近更新 更多