【问题标题】:Storing an array in a string (Database experts question)将数组存储在字符串中(数据库专家问题)
【发布时间】:2010-11-11 22:15:56
【问题描述】:

我有一个包含 100000 个产品的产品表,还有一个包含 5000 条记录的用户表。并假设用户可以向我们提供有关此产品的任何组合的反馈。所以假设他选择比较产品 1,3,100,200,400,500 等等。 (他可以向我们发送有关其他产品的其他反馈)

所以这是我的问题,我只是想知道一个专业的数据库设计师会如何看待这种产品和用户数量很大的情况。存储此评分的一种方法是使用单个字符串,例如:1#5 3#4 100#5 .... x#y 表示他给 id 为 x 的产品打了 y 颗星。例如,我可以在我的 php 脚本中加载这个 vote_string 并提取它的详细信息。

因此评级表可能具有以下结构: id, user_id, vote_string

另一种方法是将此反馈存储在此结构中:

投票表: id、user_id、日期

vote_details 表: vote_id, product_id, vote ==> (vote_id,products_id) 作为主键,vote_id 是外键。

(或者可以将这两个表压缩在一个表中,例如 id,user_id,product_id,vote [id,user_id,product_id] 作为主键)

所以我想在第二种设计中查询更容易,但每次查询会消耗更多的空间和时间,同样在产品删除的情况下,使用第二种设计会更好。你会怎么做?

任何想法都可以接受。

【问题讨论】:

    标签: sql mysql database database-design


    【解决方案1】:

    您几乎从不想走在数据库领域连接字符串的道路上。只是让做查询的生活真的很痛苦——而且,也不是数据库被设计用来处理数据的方式。

    认为您需要第二种方法。您需要考虑主键等问题{即同一个人可以为产品投票两次吗?}

    【讨论】:

    • 关于连接的好点。是的,他可以。与其他产品相比,他几乎可以发送很多关于 1 产品的反馈。
    【解决方案2】:

    通过将其存储为字符串,例如 1#5 3#4 100#5,您以后创建报告会变得更加困难。每次需要使用数据时,您还必须进行一些字符串操作。对于像这样的简单结构,我看不到好处。

    我会选择一张桌子(id、userid、productid、vote),但我相信两张也可以。

    【讨论】:

      【解决方案3】:

      Ehsan

      通过连接,您刚刚杀死了数据库强制完整性或使用索引有效搜索用户是否为特定产品投票的任何能力。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-09
        • 2015-12-13
        • 2015-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多