SQL 中的模型喜欢/不喜欢

SeT*_*ToY 3 database-design

我正在尝试实现类似于 Facebook 的行为(好吧,最类似于 YouTube)。

在我的表我有不同Products,每个Product可以喜欢不喜欢的一个Customer。我不想让用户评价(假设在 1 到 5 星之间),所以简单的喜欢或不喜欢就足够了。

代表它的最佳方式是什么?


我考虑了三个基本表格(在 旁边Customers):

Products (身份证,姓名,...)

ProductLikes (Id、CustomerId、ProductId、CreatedOn)

ProductDislikes (Id、CustomerId、ProductId、CreatedOn)

但这意味着有两个数据几乎完全相同的表。


另一个想法是具有以下内容:

Products (身份证,姓名,...)

ProductLikes (Id、CustomerId、ProductId、IsLike、CreatedOn)

但这意味着我以后不能提供第三种状态,如果我决定这样做的话。


我的最后一个想法:

Products (身份证,姓名,...)

ProductRatings (Id、ProductId、CustomerId、评级、CreatedOn)

其中“喜欢”的评分为 5.0,“不喜欢”的评分为 1.0。

Col*_*art 5

我会在你的第二个和第三个选项之间选择一个变体:

Products (Id, Name, ...)

ProductVotes (Id, CustomerId, ProductId, Vote, CreatedOn)
Run Code Online (Sandbox Code Playgroud)

该列Vote应被限制为仅允许值LikeDislike或者,如果您愿意,1并且-1- 后者具有更简单的可能性来执行sum()喜欢和不喜欢的操作以获得整体投票。

  • 在“投票”表中添加一列“评论”(如您在另一个答案中所说)也是一个好主意。谢谢!我还可以补充一点,这些投票是针对特定的 ProductVersion 而不是产品本身进行的。以及整体产品喜欢/不喜欢/投票/所有版本投票的总和......如果这有意义吗?;) (2认同)