[英]How would I implement a star rating system into my Database design?
我目前正在制作一个 Android 应用程序,我希望允许用户对其他用户发布的帖子进行评分。
这是我当前的设计,但是,我会将评级作为单独的表包含还是包含在媒体上传表中?
如果它是一个单独的表,它会是这样的吗?
评分表:(Rating、PostID、Rating_Count、Average_Rating)
如果我的设计还有什么问题,那也将不胜感激!
这一切都取决于你希望评级如何运作,谁进行投票或投票,是否跟踪每个人投票以避免同一个人多次投票等。
这是我会做:添加一个唯一的数字(长?) RatingID
场每票,链接PostID
字段comments表,增加一个Rating
(整数)字段的值限制为0至5(或任何范围你喜欢),然后计算从投所有选票(删除平均Rating_Count
和Average_Rating
领域)。 您可以定义一个视图来计算每个帖子的平均评级,以用于例程,以确定如何在Post旁边显示它。
另外,我会为每个用户使用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
的计数进行PostID
。
我会推荐上述方法,因为它可以让你在将来使用评级做更多的事情。 另外,您有一个很好的结构可以使用您的Comments
表。 恩。 显示谁评分什么和得分。
如果要将其附加到Post
表,则不需要另一个表。 你会简单地添加Rating_Count
和Average_Rating
表。 在您的应用中,您不必每次评价帖子时都要执行更新。 你将不得不拉Rating_Count
和Average_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.