質問: MySQLでJSON型の利用を考えています。 実際のメリット・デメリットについて想定が正しいのか教えてください。 tumblrなどの投稿形式が複数あるサービスでは、テキストや動画など色々な形式でユーザーが投稿し、タイムライン上には一度に複数の形式の投稿データが存在すると思います。 こういった場合はデータベースの設計として、正規化して複数のテーブルに分けるよりも、一つのテーブルで一度に必要な情報を取得できる方が単純でメリットがあるかなと考えています。 JSON型を利用するにあたり、以下のような考えで正しいでしょうか? #### 想定デメリット 1. JSON型のデータは検索性や集計性が若干低下する 2. データベースサイズが少し肥大化する #### 想定メリット 1. JSON型部分には検索集計項目を格納せず、クエリの単純化による高速化 2. 1つのテーブルで多様な投稿データへの対応
回答: 本当に検索項目や集計項目を入れないならJSONにするメリットそのものがなくて、LONGTEXT型でいいではないか、という話になりかねないですよね。やっぱり検索も集計もするのではないでしょうか・・ また正規化は別の話題で、ユーザーの投稿にユーザーの名前と投稿内容が含まれているとして、ユーザーが自分の名前を変更した後に、過去の投稿を見た場合に、名前はどうなっていればいいのでしょうか? もちろん、過去の名前のまま出てきていいのでしたら簡単ですが、名前を変えたら過去の名前も変わって欲しかったりしますよね。 柔軟ではあるのですが、古典的なRDBMSで構造化してるメリットで、オブジェクトを入れてしまうデメリットはあって、過去のデータを簡単には書き換えられないですから、仕様変更時に取り出してから「これ項目ないのがあるけど、どうする?」って話になりますし、extract・・とかになるので、簡単にツールを使って検索したり調査したりするのが面倒なことになります。descと打つだけでは何が入ってるかわからないです。