イイねの対象が複数存在する場合のテーブル設計について相談できる人がまわりにいないので困っています。
例えばmediumやdev.toでは「投稿」と「投稿についたコメント」に対してイイねができます。
ユーザーは投稿/コメントについたイイね数が確認できるのはもちろんのこと、自分がイイねした投稿やコメントはマイページで確認できます。
今回の要件(やりたいこと)はこちらと同じようなことになります。
その要件を実現するために、自分なりにテーブル設計をしてみましたが、以下の懸念点が出てきました。
- likesテーブルで外部キーがusersにしかはれない
- データ量が膨大に膨れ上がりそうな予感
こういったケースの場合どういった設計にするべき(するのが良い)でしょうか?
何か少しでもアドバイスいただけると幸いです。
関連テーブルの構造イメージ
CREATE TABLE `users` ( `id` varchar(255), `name` varchar(255), PRIMARY KEY (`id`) ) CREATE TABLE `posts` ( `id` varchar(255), `title` varchar(255), `content` varchar(255), `author_id` varchar(255), PRIMARY KEY (`id`), FOREIGN KEY (`author_id`) REFERENCES `users` (`id`) ) CREATE TABLE `comments` ( `id` varchar(255), `post_id` varchar(255), `author_id` varchar(255), `content` varchar(255), PRIMARY KEY (`id`), FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`), FOREIGN KEY (`author_id`) REFERENCES `users` (`id`) ) CREATE TABLE `likes` ( `id` varchar(255), `object_type` varchar(255), `object_id` varchar(255), `user_id` varchar(255), PRIMARY KEY (`id`), FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) )
likesテーブルの中身イメージ
ID | ユーザーID | オブジェクトタイプ(テーブル名) | オブジェクトID(レコードID) | ※説明用 |
---|---|---|---|---|
1 | user1 | posts | post1 | user1がpost1に対してイイね |
2 | user2 | posts | post9 | user2がpost9に対してイイね |
3 | user1 | comments | comment1 | user1がcomment1に対してイイね |
4 | user1 | comments | comment5 | user1がcomment5に対してイイね |
5 | user1 | comments | comment13 | user1がcomment13に対してイイね |
補足追記
- 将来的に、投稿人物(users)に対してイイね機能を追加したり、投稿写真(photos)に対してイイね機能を追加したりと、イイねの対象が増える可能性があります。
- RDBMS(MySQL5.7を利用想定)を前提に考えております。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/12/20 07:30 編集
2018/12/20 07:54 編集