MySQL数据库设计用户评分

标签 mysql sql database-design

我目前正在设计电子商务网络应用程序的数据库。

我需要添加使用 5 星评级系统(例如亚马逊)对另一个用户进行评级的可能性。我认为我必须在数据库中再添加一张表(例如 USER_RATING)。但是与我的 USER 表使用什么样的关系呢?

我的USER表具有以下字段:

user_id INT <- PK
first_name VARCHAR(35)
last_name VARCHAR(35)
email VARCHAR(254)

USER_RATING看起来像这样:

value FLOAT
time TIMESTAMP

最佳答案

您需要记录一个用户对另一个用户进行评分的时间,以防止重复,因此我建议如下所示:

CREATE TABLE user_rating (
    rated_user_id INTEGER NOT NULL,
    rater_user_id INTEGER NOT NULL,
    value FLOAT,
    time TIMESTAMP,
    PRIMARY KEY (rated_user_id, rater_user_id));

并在 rater_user_id 上创建外键。

根据您的应用程序和您期望的评级数量,也可能值得对设计进行一些非规范化,并记录current_ rating(即总体)和number_of_ ratingsUSER 表上。

关于MySQL数据库设计用户评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27496047/

相关文章:

mysql - 页面订阅的表架构

php - 根据另一列先前选择的值选择特定行

mysql - SQL - 获取投票最多的日期

mysql - 动态(变量)数据库表名与存储在列中的变量

在 PostgreSQL 中进行全文搜索的 Django 模型架构

php - 使用 PHP 将 Android 应用程序连接到外部 MySQL 数据库

mysql - inner join 按客户显示销售列表

mysql - 左加入 MySql 中的 CTE

sql - 在 sqlite 中从 DATETIME 获取月份

sql-server - SQL Server : how to constrain a table to contain a single row?