2

私は2つのテーブルを手に入れました(今のところ):

  1. Topic
  2. Post(投稿はトピックへのコメントです)

これらのオブジェクトを好きにするオプションを追加したいと思います。
そこで、Likes のテーブルを 1 つ作成し、enum を使用してどのオブジェクトが気に入ったか (もちろんオブジェクトの ID を含む) を示すことを考えました。

ちなみに、このオプションを選択した場合、すべてのオブジェクトを表す列挙型または別のテーブルにする必要があります。

id object_name
1 トピック
2 投稿

もう 1 つのオプションは、オブジェクトごとに likes テーブルを作成することです。

ベストプラクティスは何ですか?

4

3 に答える 3

2

オブジェクトごとに個別のテーブルを作成する方が良いと思います。

テーブルを 1 つだけ使用した場合に得られるものはわかりません。1 つのテーブルでも外部キーを適切に使用することはできません。

object_idつまり、列が指すテーブルがわからないため、テーブルに列を追加できないということです。この場合、2 つの追加の 2 つの列がtopic_idありpost_idます。常に 2 つのうちの 1 つが になりますNULL

于 2012-09-02T16:01:14.393 に答える
1

同類のために別のテーブルを作成するだけです:

tbl_posts_likes (likeID、userID、postID、いいね = 1、いいね = -1)

次に、次のようなサブクエリを記述できます。

SELECT SUM(like) as likeCount, SUM(unlike)
FROM tbl_posts_likes
GROUP BY postID
WHERE postID= posts.postID
于 2013-12-25T17:32:31.827 に答える
0

「いいね」を追跡する方法に応じてlikes、次の効果を持つ別のテーブルを追加することをお勧めします。

likes (like_id, like_type)

この時点から、誰かがトピックまたは投稿のいずれかを気に入るたびにレコードが挿入されるため、単純COUNT()に各 (トピック/投稿) の「いいね」の数になります。like_typeただし、ユーザーごとに「いいね」を追跡する場合は、ユーザー用に別の列を追加する必要があります。

個々の投稿またはトピックを追跡する場合は、オブジェクトごとにテーブルを設定し、トピックまたは投稿の外部キー制約を作成しますID

topic_likes (tl_id, topic_id)
post_likes (pl_id, post_id)

上記のデザインでは、「いいね」ごとにエントリが作成されます。各オブジェクトのいいね! の合計数のみに関心がある場合は、次のように設定できます。

likes (like_id, like_type, likes)
于 2012-09-02T16:04:00.190 に答える