よくある「いいね機能」などのDB設計で質問があります。
「いつ、何に、誰が」を持つテーブルよりも、「誰が、その他の情報」という方がいいのではないか?という考えなのですが、
なぜ前者が用いられるのでしょうか?
###「いつ、何に、誰が」を持つテーブル
こちらでは、「user_idが2さんがいいねしている記事」を取得するとき、「user_idが2の行」を複数探し、そこから「updated_at」や「article_id」など複数の列を取得してこなければなりません。
+----+---------------------+------------+---------+ | id | updated_at | article_id | user_id | +----+---------------------+------------+---------+ | 1 | 2020-01-25 12:35:43 | 1 | 1 | | 2 | 2020-01-25 12:35:44 | 1 | 2 | | 3 | 2020-01-25 12:35:44 | 1 | 3 | | 5 | 2020-01-25 12:36:16 | 2 | 2 | +----+---------------------+------------+---------+
###「誰が、その他の情報」を持つテーブル
こちらならば、「user_idが2さんがいいねしている記事」を取得する速度が速いですよね。
「user_idが2の行」は1つしかなく(下記は見やすく2行にはしていますけど)、その1つのdataを取得すれば済むからです。
同様に削除も更新も何もかもこちらの方が早いような気がするのですが、どうなのでしょうか。なぜこちらより上の設計が用いられるのか妥当な理由を知りたいです。
+----+-------------------------------------------------------+---------+ | id | data | user_id | +----+-------------------------------------------------------+---------+ | 1 | [{"updated_at":"2020-01-25 12:35:43","article_id":1}] | 1 | | 2 | [{"updated_at":"2020-01-25 12:35:44","article_id":1}, | 2 | | | {"updated_at":"2020-01-25 12:36:16","article_id":2}] | | | 3 | [{"updated_at":"2020-01-25 12:35:44","article_id":1}] | 3 | +----+-------------------------------------------------------+---------+
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/25 04:02
2020/01/29 03:43
2020/01/29 04:05 編集
2020/01/29 04:05