« 論理データモデル | トップページ

2012年10月15日 (月)

物理データモデル

前回作った、論理データモデルのE-R図を元に、物理設計まで進めていきます。
やや乱暴な方法ですが、論理データモデルでのエンティティの属性とリレーションシップの詳細を検討しながら、同時に、物理データモデルの検討を進めます。

「主催者」は、複数のニコニコ動画会員で構成されるグループと思われますが、Angel-CUPでそのメンバーを管理する予定はありません。「主催者」には「イベント」とのリレーションがあり、1つの「主催者」が複数の「イベント」を開催することはありますが、「イベント」に対して「主催者」の名称とホームページの情報があれば十分ですので、「イベント」エンティティの属性としてしまうことにします。

「イベント」はAngel-CUPに実装します。従来のシステムでは、mmdcup9y/setting.php の様にPHPのインクルードファイルとして実装していましたが、データベースのテーブルとします。
主キーはイベントコードです。MMD杯の予選と本選は、関連のあるイベントですが、別のイベントとします。主催者の情報のほか、各種のレギュレーションもこのエンティティで管理します。タイトルやタグについて、いずれかの条件を満たせば良い場合は、複数の正規表現文字列をカンマ区切りで設定する予定です。

さて、論理データモデルでは、「イベント」と「イベントマイリスト」のリレーションがあり、1:nの関係です。Angel-CUPに必要な範囲で「イベントマイリスト」の属性を考えると、以下の様になります。
 イベントマイリスト(マイリストID、マイリスト名称、イベントコード、...)
しかし、「マイリスト」はニコニコ動画で実装されているものであり、イベントコードを外部キーとするような、構造の変更はできません。Angel-CUP上では、「イベント」で使っている「マイリスト」のIDがわかれば良い程度ですので、「イベント」の属性として、マイリストIDを複数設定できるような実装とします。

「動画」は、ニコニコ動画のAPIから取得した動画情報のコピーを保存しておくため、データベースのテーブルとして実装します。識別子はニコニコ動画の動画のIDです。(例:sm18655497)
動画のサムネイルはAngel-CUPのサーバ上に保存するサムネイルファイルのパスとして、動画そのものはニコニコ動画のURLとして管理し、マルチメディアコンテンツの実体はデータベース内には置きません。
再生回数、マイリスト数、コメント数等の情報は、その動画がニコニコ動画に存在している限り最新の値(実際には更新サイクルでの前回の値)を管理しておきます。イベントでの順位等の情報源となる、投票終了時点の情報は、「イベント参加動画」で管理します。

「イベント参加動画」は、イベントコードと動画IDの2項目を主キーとするデータベースのテーブルとして実装します。
「動画」に関する情報の内、対象のイベントに関連のある情報を管理します。例えば、テーマ、対象のイベントとしてレギュレーションに従っているかどうか、投票終了時点の再生回数、マイリスト数、コメント数、等です。
また、MMD杯の様に、予選と本選がある場合は、本選動画から予選動画を参照するため、同じエンティティの異なるインスタンスへのリレーションを設定します。

「動画」と「イベント参加動画」は、従来のシステムではvideolistテーブルとして実装されていた部分を、動画IDだけで特定できる部分と、イベントコードと動画IDの2項目で特定できる部分に分けたものになります。

「動画」の「投稿者」の情報は、ニコニコ動画で管理していますが、投稿者名を表示するために、ユーザIDとニックネームの情報は、Angel-CUP側に持っておきたいです。テーブルとするのではなく「動画」の属性とすれば十分です。
一方、複数の制作者の合作の場合や、投稿者名とイベントへの参加者名が異なる場合については、動画コメントから取得できる情報を元に、「イベント参加動画」の属性として管理することにします。同じ動画で複数のイベントに参加した場合、楽曲制作者との合作、モデル制作者との合作、あるいは、投稿者自身が複数の名前を持って使い分けているケース、等を考慮しました。

「テーマ」は、イベントコードとテーマ略称の2項目を主キーとし、テーマの正式名やテーマを取得するための正規表現等を管理する予定です。

「賞」は、登録時に自動採番される番号(賞ID)を主キーとし、イベントコードと賞の名称を属性とします。情報として出力する要件があれば、賞の選定方法等の説明を属性に加えます。このエンティティの主キーとしては、イベントコードと任意に設定する賞IDの複合キーとすることも出来るのですが、賞を設定する際に賞IDを考えるのが煩雑に思えたので、自動採番としました。

「授賞」は、賞IDと動画IDの2項目を主キーとし、授賞理由等を属性とします。

「再生数等履歴」は、動画の再生回数等を定期的に記録しておくためのものです。自動採番のシリアル番号を主キーとし、動画IDと日時、再生回数、マイリスト数、コメント数を記録します。

ここまでの検討を基に、Angel-CUPのデータベースに実装する範囲で、物理データモデルのE-R図を作成しました。
Angel-CUP:物理データモデル

さて、第9回でAngel-CUPのお手伝いをして、難しかったのが「動画」の削除の扱いです。削除には、動画自体が削除されている状態と、マイリストから削除されている状態があります。
動画自体が削除される理由としては、投稿者本人削除、ニコニコ動画運営削除、権利者削除があります。
マイリストから削除される理由としては、投稿者本人による動画削除=参加取消、投稿者の申告による削除、MMD杯運営の判断による削除、があります。「動画」のニコニコ動画運営削除や権利者削除の場合は、参加意志は残っているとみなし、マイリストからは消さないことになっているそうです。
動画自体の削除は「動画」エンティティ、マイリストからの削除は「イベント参加動画」エンティティ、それぞれに削除日時という項目を設定することで対応します。物理的にレコードを削除してしまうと、間違いであった場合に後から復活が出来ないため、削除されていることを削除日時で示すようにします。なお、削除日時は実際に削除された日時ではなく、Angel-CUPが削除を認識した日時となります。

最後に、システムの運用管理上、各テーブルのレコードを追加・更新の記録をするための項目を全テーブルに設定します。
 登録日時、登録USER、登録IP、登録URI(バッチの場合はプログラムパス)、登録UA(Webの場合のみ)
 更新日時、更新USER、更新IP、更新URI(バッチの場合はプログラムパス)、更新UA(Webの場合のみ)

この後は、他のAngel-CUP関係者の意見も取り入れ、テストDBの構築等を進めていきます。

« 論理データモデル | トップページ

Angel-CUP」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/588802/55897291

この記事へのトラックバック一覧です: 物理データモデル:

« 論理データモデル | トップページ

ウェブページ

儲かる?