【问题标题】:mySQL Database - Storing Multi-Criteria RatingsmySQL 数据库 - 存储多标准评级
【发布时间】:2013-10-29 14:20:28
【问题描述】:

我一直在搜索和阅读有关评分系统的大量内容,但找不到解决我想要实现的目标的解决方案...

我有一个网站,用户登录后可以在该网站上提交产品。现在我希望其他用户能够根据 3 个不同的标准对这些产品进行评分。我正在使用 php 和 mySQL 数据库来存储所有运行良好的信息,但我现在不确定如何合并评级。

目前我有一个 PRODUCTS 数据库,该数据库根据其类别保存各种表格。下面是一个表格示例:

TOASTERS
---
ID (auto-incrementing)
Brand
Set
Number
Name
Edition
Image (stores the location of the image the user uploads)

然后,任何用户都可以根据 3 个标准(质量、价格、美学)对表格中的该行进行评分(满分 10 分)。每个标准的用户平均值显示在每个产品页面上,但我想存储每个用户的个人评分,以便我可以在他们的个人资料页面上显示他们评分的简短历史。或者在主页上实时显示最新的用户评分。

我想做的很像awwwwards.com。 (请参阅页面右下角以查看我正在谈论的直播)

提前致谢!

【问题讨论】:

  • 您不只需要一个 RATINGS 表,其中包含产品 ID 和用户 ID 的外键,然后是质量、价格和审美等级的列吗?

标签: php mysql sql database rating-system


【解决方案1】:

我认为您应该使用单个 PRODUCTS 表或至少创建 PRODUCTS 表并模拟它与类别表之间的继承。

如果每个类别都有一些特定的属性,则为每个类别创建一个表会带来一些优势,但它可能导致需要编写单独的代码来处理每个表。或者,您可以使用两个表来“垂直”存储所有自定义属性:PROPERTIES(propertyID,PropertyName)PROPVALUES(productID,propertyID,PropertyValue)

如果选择多表并模拟继承,可以这样实现:

PRODUCTS
---
ID (auto-incrementing)
Brand
Set
Number
Name
Edition
Image
VoteCount    <+
SumQuality    +-updated by trigger
SumPrice      |
SumAesthetic <+

TOASTERS
---
productID (PK and FK to PRODUCTS)
(toaster specific fields go here, if any)

然后您将能够创建表 VOTES,引用表 PRODUCTS

VOTES
---
productID (FK to PRODUCTS)
userID (FK to USERS)
Quality    
Price     
Aesthetic
VoteDateTime

如果查询整体产品评级的频率确实比查询投票历史的频率高,作为优化,您可以将字段 VoteCount、AvgQuality、AvgPrice、AvgAesthetic 添加到 PRODUCTS 表中,正如 srdjans 已经假设的那样。您可以通过在表 VOTES 上触发或在 PHP 代码中手动更新这些额外字段。

【讨论】:

  • 我认为单个 PRODUCTS 表确实更有意义,因为所有产品的属性都相同,你是对的。所以我将使用单个 PRODUCTS 和 VOTES 表。在这种情况下,您建议我将每个标准的平均值存储在 PRODUCTS 表中(我假设每次添加相应的 VOTES 行时都会更新?)
  • 是的,您可以存储平均值并在添加新投票时更新它们,例如 avgPrice1 = (avgPrice0*voteCount0 + votePrice)/voteCount1甚至更好 存储摘要投票:更新它们例如 sumPrice1 = sumPrice0 + votePrice 并查询平均值sumPrice/voteCount as avgPrice
【解决方案2】:

创建单独的表来存储用户个人评分(主键、用户 ID、产品 ID 和评分)。在“产品”中创建附加字段以存储平均值。每次一些用户对某个产品进行评分时,您都会在“评分”表中插入记录,然后再次计算给定产品的平均值,并更新产品中的行。这样做,您将可以轻松访问评级,还可以分析用户的个人评级。

Ps - 您可能还希望存储有多少用户评价了某个产品。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多