我要将用户存储Likes
到数据库中。但我不确定这两种方法中哪一种更好:
在我的情况下,用户可以喜欢Posts
,Comments
和Groups
. 像脸书这样的东西。
假设 : 有 1000 万个赞Posts
,Comments
并且Groups
方法一:
创建一个Like
表,并LikeType
在其中添加一个字段:
+--------+----------+--------+
| likeID | LikeType | userID |
+--------+----------+--------+
| 1 | 1 | 1 | // User 1 liked a post
+--------+----------+--------+
| 2 | 2 | 1 | // User 1 liked a comment
+--------+----------+--------+
| 3 | 3 | 1 | // User 1 liked a group
其中LikeType
包括:1,2,3
1 = 帖子,2 = 评论,3 = 组
方法B:
为帖子、评论和组中的每一个创建三个单独的表格。
在方法 A 中,
因为点赞太多,需要一个额外的条件 ( Where status = 1, or 2, or 3
) 才能获得帖子、评论或群组点赞,哪种方法更好?
更新后的帖子:
users
uid // PK
---------------------------------------
itemTypes
typeID // PK
typeText // comments, groups, posts
---------------------------------------
--------------------------------------- +
posts |
id // PK |
typeID // 1 |
... |
--------------------------------------- +
comments |
id // PK |
typeID // 2 |
... |
--------------------------------------- + Items
groups |
id // PK |
typeID // 3 |
... |
--------------------------------------- +
photos |
id // PK |
typeID // 4 |
... |
--------------------------------------- +
---------------------------------------
likes
uid // FK to user id
itemid // FK to posts, groups, photos, comments id
itemType // FK to itemsTypes.typeID
// select post #50 likes
SELECT count(*) FROM likes WHERE itemid = 50 and itemType = 1
// select comment #50 of user #2
SELECT * FROM likes WHERE itemid = 50 and uid = 2 and itemType = 2
这是一个好的架构吗?