タグDBを作ろう

要素間リンクのお話。

Ajaxで a ∈ A とか、 b ∈ C とかを登録し易いような仕組みを作ったんですが、
よくよく考えてみると a ∈ A, B や b ∈ A, B, C とか親がいっぱいというパターンがあり得るんですよね。
さらに言えば、 A ∈ a, b とか C ∈ b, c, d といった逆パターンや、A ∈ a, (1), (3), <1> とかグループの壁を超えたリンクが必要になる事に今更ながら気づきました。

親がいっぱいというパターンだけ見れば、テーブルのレコードに親一覧みたいな名前つけて「*1*, *3*」とか付ければ良いんですが、逆パターンやグループの壁を超えたリンクを考えたとき、タグDBが必要になってくると思います。

という訳で今日はタグDBの仕様を考えていました。
手始めにこんなルールを設けてみました。


「要素はタグ情報を保持しない。タグDBに要素を投げると登録タグが帰ってくる。
 タグDBにタグを投げると登録要素が帰ってくる。」


上のルールに則って初心者ながらに無駄の無いデータベースを考えていたところ、データベース1つだとタグの名前(キャプション)部分で無駄と整合性の問題が生じてしまうという事に気づきました。


*タグDB案その1
1.ID、2.参照元、3.参照先、4.タグ名


⇒任意のタグ名に一致する参照元の検索に時間がかかりそう。


*タグDB案その2
1.ID、2.参照元、3.参照先、4.タグ名、5.タグID


⇒検索の問題はクリア出来そうだが、タグ名とタグIDの整合性をどう取るかが問題。
 また、5が同値ならば3-4も同値になる為容量に無駄が生じる。


つまりタグを管理するためには、タグ名とタグIDの整合性を取るためのデータベースと、タグリンクや任意のタグ名の参照元を検索する為のデータベースがあった方が分かり易く、無駄が無いかと思います。


*今日のタグDB案
[タグ管理DB]
1.ID、2.タグ名 3.参照先


[タグリンク管理DB」
1.ID、2.参照元 3.タグID


この場合だとクエリがちょっと増える気がするのですが、それを考え出すとキリが無いので、今は大丈夫でしょう。
最後にシャワーを浴びながら考えた現状の問題点ですが、


タグが生成された後に参照先が生成された場合の挙動をどうするか?


→参照先が生成された際にタグに同一の名称があるか調べ、
 一致するものがあれば、タグ管理DBに登録すればいい。


省略名称などで一致しなかった場合は?


→人間が判断し、同一と判断したタグ自体を一気に書き換えればいい。


タグを登録した人のオリジナリティーが失われるのでは?


→それなら、タグ自体にグループを設けて同一のものとして扱えばいい。


などなど、まるでいたちごっこのようですが、明日の実装に向けて少しでも無駄のないタグDBを考えながら寝ようと思います。