MySQLでTAG機能としてタグ付けを実装するデータベース設計を考える


ブログなどでも「タグ機能」って便利ですよね。カテゴライズとはまた違うタグ機能をMySQLを使って設計する時に、どのように実装するかを検討してみました。
パターンとしては主に3つの方法が主流なようです。
もちろん扱う情報の内容や量によっても設計は大きく変わってきますので、データに合った設計を心がけたいですね!

SPONSORED LINK

MySQLで「タグ機能」を実装する

各種サービスで応用可能な「タグ機能」を実装する際にデータベースの設計方法の種類です。

1.テーブル一つで実現する

id contents tags
1524 Night Ware パジャマ
洋服
1525 Town
ビル
風景

tagsの中に全てのタグを改行しながら詰め込む方法です。
テーブルが一つで済んで、タグ検索クエリーも単純化できるメリットの反面、
パフォーマンスを考慮するとタグ検索に全文検索が必要になる。
少ないデータ量の時に活用される方法。

2.テーブル2つで実現する

table1

id contents
1524 Night Ware
1525 Town

table2

id tag
1524 パジャマ
1524 洋服
1525
1525 ビル
1525 風景

tagのテーブルを分離した方法です。
IDに対して付けられたタグごとに格納していくのでインデックスの活用も効きます。
小規模から中規模まで幅広くカバーできる設計だと言えます。

3.テーブル3つで実現する

table1

id contents
1524 Night Ware
1525 Town

table2

id tag
1524 tag_id_AAA
1525 tag_id_BBB

table3

tag_id name
AAA パジャマ
BBB

tag割り振りテーブルを噛ませる方法です。
例えば「存在するタグ一覧」の表示をする時でも簡単です。
また、タグの名前が変わった時でも一箇所の変更だけでメンテナンスは終了です。
table2を拡張すればbookmarkへの関連付けも容易になり、将来性も視野に入れれば最も効率的な設計かもしれません。

まとめ

MySQLだけでなくデータベースの設計は最初が結構肝心ですよね。秀逸なデータベース設計には本当に憧れます^^
「自分がわかればそれでいい」という設計では大きな障害に見舞われる日もそう遠くはないかもしれません。
最初は必要ないと思っても、拡張性が高い設計にしておくことは、将来への自分への投資に匹敵しそうな勢いです!

今日も知識欲は止まらない。

SPONSORED LINK
トップへ戻る