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

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

関連トピック

Mail

PHPエラー対処方法「malformed header from script. Bad header=No recipient addresses found i」

PHPからメールを送信する際に「malformed header from script. Bad header=No recipien

apk_android

Androidアプリのapkを解析してソースコードを見れるの?

Androidアプリを解析する方法が気になって調べてみると、とても簡単に解析できてしまうことに驚きます。 もちろん難読化といった処置を

mysql

MySQL カラム名・テーブル名などに使ってはいけないキーワード

MySQLでテーブル名やカラム名に使用できないワードの一覧まとめ 予約語を使うのは危険なので回避しましょう。 バッククオートで囲って

Random

MySQLのrand()ランダム関数の負荷問題を考えてみる

MySQLで結構使う場面が多いランダム関数rand()ですが、間違った指定をするとデータベースに思わぬ負荷をかけることになります。 今

php-cannot

PHPで配列のエラー「Cannot use string offset as an array」がでる場合の対処法

PHPで「Cannot use string offset as an array」が出たら確認したいポイントをまとめました。 このエ

Yesterday

PHPのdate関数で日付「昨日・明日・1時間前」を取得しよう!

PHPのdate関数を使えば自分の取得したい日付を1行でズバッと指定できます。 もう簡単すぎて、プログラムというよりは言葉で伝えてあげ

Text

PHPエラー対処方法「RSSをXML取得時に不正文字が存在する場合」

PHPでRSSをsimplexml_load_stringなどを使って解析する場合に不正な文字が含まれている時に発生するエラー対処方法の

php

PHPエラー対処法 First argument should be an array

[code] First argument should be an array [/code] このエラーは、 最初の引数

公開日:2013/04/05