2009/02/13

Bento 2: 関連データを使う

こんばんは。虐待弁当ってまだ続いているんですね。
簡単なデータなら表計算で十分と書いてきた。ではデータベースでないとできないことというのは何か? 「テーブル間の関連」はそのひとつで、「データベースに期待すること」であげた。
テーブル間の関連を用いた例として、予め用意してあるライブラリProjectsがある。ひとつのプロジェクトには、複数のメンバー (アドレスブックのレコード)、複数のタスク (iCalタスク)、複数のイベント (iCalイベント) が関連づけられる。iCalタスクというのは、今までそんな機能があることを知らなかったのだけれど、iCal の 「表示」メニュー > 「To Do リストを表示」で出てくる。
ここでは何の説明もなく「アドレスブックのレコード 」なんて書いたが、BentoではMac OS XのアプリケーションのアドレスブックとiCalのレコードが取り込まれ、BentoでアプデートするとこれらのMac OS Xに自動的に反映されるのだ。
さて関連データの話に戻ろう。今回はこの関連データを使ってみる。
複数のライブラリ (テーブル) を使う応用を考えるのだが、新たに複数のテーブルを使うのではなく、前回作った番組データベースを拡張し、新たに「タグ」テーブルを追加する。
これまで番組には「分類」フィールドをつけていたのだが、これだと一つの分類体系にしか対応できない。ある番組が、「技術」の側面と「ビジネス」の側面をあわせ持っている場合にどちらに分類するか困るのだ。そこで、一つの番組レコードに複数のタグを与える。
テキストフィールドにタグをコンマなどで区切って並べるという方法もあるのだが、そうすると同じタグを持つものを集めるのに検索を行う必要がある。また、全文検索を行うと部分一致になるので、"CM" タグがついたものを集めたい場合に、"SCM" とか "CMS" とかのタグがついたものも検索されてしまうのだ (そんなタグのついた番組はないけどね)。
そこで「タグ」を別テーブルとしてつくる。番組に対して複数のタグを関連データとして与えられるようにする。また、同じタグをもつ複数の番組が一覧できるように、タグのほうにも関連レコードとして番組を加えることにする。
新しいライブラリ「タグ」を作り、テキスト型フィールド「タグ」(これは名前をライブラリとは別にした方が分りやすかったかも) と、「関連レコードリスト」型でデータソースに「番組」を選択したフィールド「TV番組」を与える。
一方、ライブラリ「番組」には、フィールドに「関連レコードリスト」型でデータソースに「タグ」を選択したフィールドを加える。
こうやって相互に関連をもたせると、番組レコードにタグを追加すると、追加したタグの方にはその番組が関連データとして追加される。逆にタグレコードに番組を追加すると、番組レコードにタグが追加される。これは便利。
さて、さらに拡張する。「タグ」レコードの関連レコードとして「タグ」を追加するのだ。これはどういう意味があるかというと、関連するタグ、類似のタグとしてどのようなタグがあるかを知ることができるようになるのだ。例えば「環境」タグの関連タグとして、より細かい分類の「地球温暖化」タグを与える。これを充実させていくと、「環境」に関連する概念として、「地球温暖化」、「リサイクル」、「太陽光発電」、「風力発電」などがあることがわかり、この中からよりスペシフィックな話題を掘り下げた番組を選択することができるようになる (そんな膨大なビデオライブラリがある訳じゃないけどね)。
追記: タグを含んでいる番組のレコード数を、「計算フィールド」を使って計算している。計算の中にCountという関数があって、これはレコード数を出すのではなく、値の入っているフィールド数を出すので、必ず値の入っているレコードを選択する必要がある。ここでは「タイトル」フィールドを使って、計算式は"Count:TV番組:タイトル"としている。

現段階ではここまでだが、この後蔵書のデータベースやブックマークのデータベースを加え、タグレコードの関連データを増やすことが考えられる。そうすると、あるタグから関連する番組、書籍、Web上の情報源を一覧することができるようになる。
最後に画面のスナップショットを載せる。
タグのフォーム


番組のフォーム (レイアウトを変えた)


テンプレートは前回と同じところに、タグ+番組.bentoTemplateとして入れた。
http://www.zumodrive.com/share/vCMGZiMT
番組のフォームは、レイアウトを行っている段階が分るように部品を選択したままの状態でスナップショットをとった。うまく収まるように順番を変えたり、大きさを変えたりしてみた。はっ! このようにうまく詰め込むことが楽しくなるのが、"Bento" の由来だったんだね!
これでモニターのノルマとしてのレポート5本、テンプレート2種はクリアしたのだけど、もう少し使ってみてまとめを書こうと思います。
コメントを投稿