Ruby on RailsとMySQLを用いてアプリケーションを開発しています。
今回は、タグ機能のデータベース設計で2つの方法を考えたのですが、
どちらが良いのか迷っているので、質問いたしました。
タグに関してですが、たとえばスキル、ジョブ、属性などが項目として存在し、
基本的に名前だけを情報としてもっています。
タグは主に検索の用途として使用する予定です。
##① 各項目ごとにテーブルを作成する方法
こちらの場合は、以下のように各項目ごとにテーブルを作る方法です。
skills - id: integer - name: string jobs - id: integer - name: string attributes - id: integer - name: string
##② 汎用的なテーブルを作成する方法
こちらの場合は、ひとつの汎用的なテーブルを作る方法です。
typeにはskill, job, attributeと各項目のタイプをenumで管理し保存します。
tags - id: integer - name: string - type: integer
##2つの方法の比較
方法①の場合
新しく名前以外の情報を追加するときには、
各テーブルごとに分割されているので、拡張しやすいと思います。
しかし、普通に作ると各モデルごとにコントローラーやビューを作成しなければなりません。
また、別テーブルにまたがって複数タグで検索する場合、複数テーブルをJoinしなければならないので、
コードが煩雑になる可能性があります。
方法②の場合
typeごとで切り替えればいいので、単一のコントローラーやビューでまとめ易いと思います。
検索もidで検索すればいいので、検索機能を実装するコードも簡単です。
しかし、新しく情報(カラム)を追加したい場合は難しいと思います。
##質問したいこと
①と②の方法に関して問題点や、ほかに良い方法があれば、教えていただきたいです。
また、①と②の場合のメリット、デメリットの認識が間違っている部分があればご指摘いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/10 01:11