我正在开发Web应用程序,我必须在facebook上实现'Likes'系统。应用程序将包含客户可以“喜欢”的几类产品。所以我已经开始创建数据库,但我坚持一个障碍。据我所知,有两种方法可以做到这一点:
首先。创建一个包含“id,user_id,item_category,item_id”字段的数据库表。当用户点击“赞”时,按钮信息将保存在此表中,包含各种类别的产品(item_category)。
二。为某些类别的项创建多个表。例如,“tbl_item_category_1,tbl_item_category_2,tbl_item_category_3”,字段为“user_id,item_id”。
很高兴能够更深入地了解此类数据库结构的最佳实践。哪个更快?更合乎逻辑/更实际?我将只使用几类物品。
答案 0 :(得分:2)
我会使用与此类似的表结构的第一个版本:
User Table: PK id
id
username
Category Table: PK id
id
categoryname
Like Table: PK both user_id and catgory_id
user_id
category_id
这是一个SQL Fiddle,其中包含表格结构的演示,其中包含两个示例查询,用于按用户分类总分数和按类别分类总数
第二个 - 创建多个表是一个糟糕的主意。如果你有50-100个类别试图查询那些表将是可怕的。这将变得完全无法管理。
如果您有多个表尝试获取总数,那么:
Select count(*)
from category_1
JOIN category_2
ON userid = userid
join category_3
ON userid = userid
join .....
使用一张表,毫无疑问。
答案 1 :(得分:1)
第一种方法是正确的方法。永远不要为项目类别制作多个表格,这会使维护代码成为一场噩梦,并使查询变得丑陋。
事实上,一般规则是任何动态的(即它改变)都不应该存储为一组静态对象(例如表格)。如果您认为以后可能会添加新类型的'something',那么您需要一个'某些'类型表。
例如,假设尝试计算用户喜欢的项目数。使用第一种方法,您可以只执行SELECT COUNT(*) FROM likes WHERE user_id = 123
,但在第二种方法中,您需要执行JOIN或UNION,这对性能有害,对可维护性不利。
答案 2 :(得分:0)
第一种方法是正确的方法。因为您不知道您将拥有多少类别,并且很难获得数据。