Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我将如何在数据库设计中实现星级评定系统?_Mysql_Database_Erd_Rating System - Fatal编程技术网

Mysql 我将如何在数据库设计中实现星级评定系统?

Mysql 我将如何在数据库设计中实现星级评定系统?,mysql,database,erd,rating-system,Mysql,Database,Erd,Rating System,我目前正在制作一个Android应用程序,允许用户对其他用户发布的帖子进行评分 这是我目前的设计,但是,我会将评级作为一个单独的表或包含在媒体上传表中吗 如果是一张单独的桌子,会是这样的吗 评分表:(评分、职位、评分、平均评分) 如果我的设计有任何问题,我们也将不胜感激 这一切都取决于你希望收视率如何运作,谁有权投赞成票或反对票,你是否跟踪每个投票的人以避免同一个人投多张票,等等 这就是我要做的:为每次投票添加一个唯一的数字(长?RatingID字段,将posted字段链接到Comments表

我目前正在制作一个Android应用程序,允许用户对其他用户发布的帖子进行评分

这是我目前的设计,但是,我会将评级作为一个单独的表或包含在媒体上传表中吗

如果是一张单独的桌子,会是这样的吗

评分表:(评分、职位、评分、平均评分)


如果我的设计有任何问题,我们也将不胜感激

这一切都取决于你希望收视率如何运作,谁有权投赞成票或反对票,你是否跟踪每个投票的人以避免同一个人投多张票,等等

这就是我要做的:为每次投票添加一个唯一的数字(长?
RatingID
字段,将
posted
字段链接到Comments表,添加一个
Rating
(整数)字段,该字段的值限制在0到5之间(或您喜欢的任何范围),然后计算所有投票的平均值(删除
Rating\u Count
Average\u Rating
字段)。您可以定义一个视图来计算每篇文章的平均评分,用于确定如何在文章旁边显示

另外,我会为每个用户使用一个ID,而不是使用他们的名字

所以我的桌子看起来像这样:

RatingID、PostID、UserID、Rating


此外,为了避免用户多次投票,该表将不允许对同一
PostID
UserID
进行多个条目,这取决于您希望如何存储评分

如果要跟踪每个单独的评级,则需要一个包含以下内容的评级表:

Column
---------
RatingID (PK)
Username (FK) (UserDetailsID if you change the primary key of the UserDetails table)
PostID (FK)    
RatingScore
DateRated
在应用程序中,您将使用该
PostID
提取每个
RankScore
,并根据所述
PostID
的计数进行计算

我会推荐上述方法,因为它将允许您在将来对评分做更多的事情。此外,您有一个好的结构,可以在
注释
表中遵循。例如,显示谁对什么进行了评分以及评分是多少

如果您想将其附加到
Post
表中,则不需要另一个表。您只需将
Rating\u Count
Average\u Rating
添加到该表中即可。在应用程序中,您将不得不在每次对帖子进行评级时执行更新。您必须拉取
Rating\u Count
Average\u Rating
>,将
评级计数
增加一,重新计算
平均评级
并执行更新


我的第二个建议是,如果你想提高你的评级设置,那么就不那么灵活了。

你可以像这样使用担架

enter code here
        $table->bigIncrements('id');
        $table->bigInteger('user_id')->unsigned();
        $table->ipAddress('ip')->nullable();
        $table->integer('star');
        $table->string('type');           
        $table->string('title');
        $table->string('average')->nullable()->default(0);
        $table->integer('count_star')->default(0)->nullable();
        $table->float('star_avg')->default(0)->nullable();
        $table->float('unstar_avg')->default(0)->nullable();

你想跟踪每个帖子的投票率吗?还是只跟踪每个帖子的平均投票率?我想获得每个帖子的平均投票率,我需要在指定帖子上记录每个帖子的投票率。你应该跟踪每个帖子的投票率。从长远来看,这让你更具灵活性,同时也让你的
UserDetails
表应该有一个主键
UserDetailsID
,而不是
Username
,才能成为一个标准化的数据库。请参阅:因此,只需仔细检查一下……评级分数将是一个值为1-5星的字段?然后在应用程序上,它将显示特定职位的所有评级分数的总体平均值,我猜这是基于se的是否使用SQL函数?@ChristianBryant是的,
RatingScore
将具有特定用户对帖子的评分值。然后,您可以创建一个存储的Proc()来检索平均值,或者在Android应用程序代码中执行逻辑。非常感谢,非常有帮助!