Likes
ユーザーをデータベースに保存します。しかし、これら2つの方法のどちらが優れているかはわかりません。
私の状況では、ユーザーはPosts
、Comments
および を気に入ることができGroups
ます。フェイスブックのようなもの。
Posts
:に対して1,000 万のいいね! があると仮定しますComments
。Groups
方法 A:
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:
投稿、コメント、およびグループのそれぞれについて、3 つの個別のテーブルを作成します。
方法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
これは良いスキーマですか?