質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

454閲覧

データベースの設計、処理について質問です。(sns系のサービスを想定)

mansan

総合スコア11

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2021/05/06 18:12

編集2021/05/07 03:12

twitterなどのSNSのようないいね機能の実装をしようと思っています。
そこで、いいねを1ユーザー3回までにします。いいねを2つつける場合に、★★☆と表示されるイメージです。
また、いいねの総数を表示します。★×4132と表示されるイメージです。

以下の2つのうちどちらの設計のほうが良いでしょうか?宜しくおねがいします。
どちらもいいねテーブルがあり、任意の一つの投稿に対して1~3の数値が入る想定です。
①いいねの総数を入れるカラムを別途用意して、いいねがついたり外されるたびに、カラムの値を更新。→Viewで表示する。
②いいねの総数はSQLで合計。→Viewで表示する。

補足追加

現状以下の構成を想定しています。
①の場合は、追加でPostテーブルにいいねの総数を入れるカラムを用意します。

Like(いいね)テーブルPostテーブルUserテーブル
ididid
post_id(FK)photo_imgemail
user_id(FK)user_id(FK)name
like_countpassword

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/05/06 19:28

両方試してみては?
mansan

2021/05/07 02:28

自分で試しても正しいかどうか分からないため、質問させていただきました。
guest

回答1

0

ベストアンサー

①はinsert+update、②はinsert+delete、という事になりそうですね。
②だと「いいねを1ユーザー3回まで」という制約の為のチェックがオーバーヘッドになるかもしれません。

星の数は単に評価のランクです。それを行に展開するというのは普通しませんよね。
星=1データという概念にとらわれすぎに思います。
なので、①で。

投稿2021/05/07 00:45

sazi

総合スコア25206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mansan

2021/05/07 02:26

回答ありがとうございます。 星=1データにする理由は、誰がどの星をつけたのか識別するためです。 例えば、ログインユーザーが任意の一つの投稿に`星2`評価していた場合に、星の色を`★★☆`と表示する必要があるからです。なので①も行に展開しています。 星=1データという概念にとらわれすぎということですが、saziさんはどのような設計が良いと考えますか?
sazi

2021/05/07 03:00 編集

「どちらもいいねテーブルがあり」という事でしたが、質問に追加された情報ではそのように見受けられません。 どのテーブルがいいねテーブルなのでしょう? ②の場合にいいねテーブルを追加というなら、それが星1個=1データという事だと思うので、その場合はやりすぎという回答です。
mansan

2021/05/07 03:09

僕の伝え方の問題で混乱させてしまいすみません。 いいねテーブルとはLikeテーブルのことです。 どちらにもいいねテーブル(Likeテーブル)があるという意味です。 また、どちらも任意の一つの投稿に対して1~3の数値が入ると伝えています。 なので星一個=1データではありません。
sazi

2021/05/07 03:14

likeテーブルのlike_countの総数を、Postテーブルに持つかどうかという事ですね。 そういう事なら、正規化の観点からは、postテーブルに項目は持たせません。 但し、レスポンスの問題が発生するようなら、総数を持たせることはありますけど、見た感じではインデックスが適切に設定されていれば、問題になるような感じはしませんね。
mansan

2021/05/07 03:32

そうです。説明の仕方に気をつけます。m(_ _)m なるほどです。 likeテーブルのpost_idとuser_idに複合indexを設定しているので大丈夫そうです。 もし、それでもレスポンスの問題が発生する場合は、総数を持たせるようにしようと思います。 まとめると、②のやり方で設計して、レスポンスの問題が発生するなら①に変える感じが良いってことであっていますか?
sazi

2021/05/07 03:46

そうですね。 先ずは正規化に則った設計をした方が良いですね。
mansan

2021/05/07 03:49

分かりました。 アドバイス頂き、ありがとうございました。m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問