メタデータテーブルの実用性について最近考えており、皆様のご意見をお聞きしたいです。お気軽にご意見下さい!!
「メタデータテーブル」が正しい呼称かもわからないのですが、下記のようなテーブルの設計のことを指しています。
+++++ 質問したいことについて +++++
■ メタデータテーブル
![イメージ説明]WIDTH:450
(wordpressのテーブルです)
usersテーブルではログインや、最低限必要な情報のみを保持しています。
usermetaでは、userの拡張情報を格納します。例えば、IDが1のユーザーの住所は、usermeta内で、
umeta_id:(AUTO_INCREMEMT),
user_id: 1,
meta_key: address,
meta_value: "東京都品川区住所1-2-3"
のように1レコードとして保持されます。
■ 対して、通常の?テーブル
![イメージ説明]WIDTH:220
userに持たせたい情報単位で、カラムを作成しています。
+++++ お聞きしたいこと +++++
上記のような設計を採用した際のメリット・デメリットはどのようなことが挙げられますでしょうか?
私個人、CakePHP等を利用してWebアプリケーションを幾つか立ち上げてきたのですが、毎回同じようなモデル(User, Admin, Post 等)を作っていました。上記設計手法であれば、Model・Controllerの再利用がかなりやりやすくなるのではないかと考えており、次のプロジェクトでは一度採用してみようと思っています。
また、上記設計によってnull許可のカラムが多く存在してしまうことを防げることもメリットなのかなぁ...と。。(住所が入力されていない場合、meta_key: address のレコードを作成しないような制御をとる)
問題点としては、meta_value列への検索クエリが遅くなることが予想されますが、実際どのくらい差分があるものなのだろうかと、疑問に思っています。
meta_keyは、usermetaテーブルのmeta_key と user_id にしっかりとindexを貼っておけば、それほどの差は出ないのではないかと考えております。
あとは、Validateion系は完全にアプリケーション側の責任になってしまいますね。。。
最近Wordpressをゴリゴリいじる機会があって、こういう設計もアリだなぁと。。。
Wordpressは、プラグインフレンドリーを優先して考えて、そうなっているのでしょうね。
だとすると、Web開発フレームワークとの相性も良いはず?!なんて考えています。
ご意見いただければ幸いです!
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/27 16:12
2015/06/28 00:00