繁体   English   中英

我将如何在我的数据库设计中实施星级评分系统?

[英]How would I implement a star rating system into my Database design?

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

数据库的ERD模型

这是我当前的设计,但是,我会将评级作为单独的表包含还是包含在媒体上传表中?

如果它是一个单独的表,它会是这样的吗?

评分表:(Rating、PostID、Rating_Count、Average_Rating)

如果我的设计还有什么问题,那也将不胜感激!

这一切都取决于你希望评级如何运作,谁进行投票或投票,是否跟踪每个人投票以避免同一个人多次投票等。

这是我会做:添加一个唯一的数字(长?) RatingID场每票,链接PostID字段comments表,增加一个Rating (整数)字段的值限制为0至5(或任何范围你喜欢),然后计算从投所有选票(删除平均Rating_CountAverage_Rating领域)。 您可以定义一个视图来计算每个帖子的平均评级,以用于例程,以确定如何在Post旁边显示它。

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

所以我的表看起来像这样:

RatingID, PostID, UserID, Rating

此外,为了防止用户多次投票,该表不允许同一PostIDUserID多个条目。

这取决于您希望如何存储评级。

如果您想跟踪每个评级。 您将需要一个评级表,其中包含以下内容:

Column
---------
RatingID (PK)
Username (FK) (UserDetailsID if you change the primary key of the UserDetails table)
PostID (FK)    
RatingScore
DateRated

在应用程序中,您将使用该PostID撤回每个RankScore ,并根据所述PostID的计数进行PostID

我会推荐上述方法,因为它可以让你在将来使用评级做更多的事情。 另外,您有一个很好的结构可以使用您的Comments表。 恩。 显示谁评分什么和得分。

如果要将其附加到Post表,则不需要另一个表。 你会简单地添加Rating_CountAverage_Rating表。 在您的应用中,您不必每次评价帖子时都要执行更新。 你将不得不拉Rating_CountAverage_Rating ,递增Rating_Count接一个,重新计算Average_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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM