タグ機能の構築方法
データベースの構築でブログなどによくあるタグ機能ってどういう風に構築されてるもんなんでしょうかね?
思いつくのはこんな風に1つの記事に3つまでとか制限をかけてフィールドに突っ込む方法
| 記事ID | タグ1 | タグ2 | タグ3 |
| 0001 | りんご | みかん | ぶどう |
| 0002 | みかん | ぶどう | メロン |
もしくは、タグ毎にテーブルを作る方法
りんごテーブル
| 記事ID | タグ |
| 0001 | りんご |
| 0002 | りんご |
ぶどうテーブル
| 記事ID | タグ |
| 0001 | ぶどう |
| 0004 | ぶどう |
1つ目は1つの記事に設定できるタグの数に制限があるし、みかんタグが付いている記事を探すのにタグ1~3まで3回検索するのはあまりにもひどすぎるような・・・
2つ目はタグの種類が300個とかになったら300個もテーブル作らなきゃいけないのもどうかと・・・
こういうのを考えられる人って本当に天才なんじゃないかと思います^^;
そんなことを考える前にSQL文のひとつでも覚えなきゃw


「ブログとかなら」ってことなら、りんごテーブルとぶどうテーブルに分けずに記事の種類を表すテーブルを設けて
CREATE TABLE entry_types
(entry_type_id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT,
entry_type VARCHAR(200) NOT NULL);
INSERT INTO entry_types (entry_type) VALUES (’りんご’);
INSERT INTO entry_types (entry_type) VALUES (’ぶどう’);
記事は種類を参照
CREATE TABLE entries
(entry_id BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT,
entry_type_id INTEGER NOT NULL REFERENCES entry_types (entry_type_id),
…);
タグはタグとタグと記事を関係付けるテーブルに分けると
CREATE TABLE tags
(tag_id BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT,
tag VARCHAR(200) UNIQUE NOT NULL);
CREATE TABLE entry_tag_refs
(entry_id BIGINT NOT NULL REFERENCES entries (entry_id),
tag_id BIGINT NOT NULL REFERENCES tags (tag_id));
だいたいしたいことができると思いますおw
タグから記事を検索するのはこんな感じです。
SELECT e.entry_id, t.tag, …
FROM entries e, entry_tag_ref r, tags t
WHERE t.tag = ?
AND r.tag_id = t.tag_id
AND e.entry_id = r.entry_id;
流石!geekなさくらちゃん♪
って・・・
辞書を引きながら頑張ってみます・・・( ゚ρ゚ )< あうあうあー