« テーマミス対策の詳細 | トップページ | 論理データモデル »

2012年9月18日 (火)

概念データモデル

第9回MMD杯、楽しませて頂きました。
運営の皆様、お疲れ様でした。
そして、素敵な動画を作って下さった参加者の皆様、ありがとうございました。

第9回では、MMD杯作品支援システムAngel-CUPミラーサイトとして、少しだけお手伝いさせていた来ましたが、次回、第10回に向けて、もう少し深くお手伝いさせて頂くことになりました。

まず、手はじめに、データベースを再構築を提案します。

Angel-CUPは、第9回MMD杯に向けて開発される段階で、1つのデータベースで複数のイベントに対応するなどの追加要件に対応した様で、システムの設計、特にデータベース設計に無理や無駄がある様に感じました。(小夜さんスミマセン)
もちろん、ちゃんと第9回MMD杯を支える役割を果たしているので、間違ってはいないのですが、今後の拡張を考慮すると、基本から見直しをしておきたいです。
Angel-CUPは、これから育つのですから。

今回は、現在のAngel-CUPシステムのデータベースとPHPスクリプト他の実装をベースに、システムの範囲外まで対象を広げ、概念データモデルを作成します。賞の記録などの新たな要件も考慮します。

では、MMD杯を例に、概念データモデルを検討し、E-R図にしていきましょう。

まず主催者がイベントを企画し、レギュレーションを公表します。
ここで主催者は、一人あるいは複数のニコニコ動画会員で構成されているはずですが、ここではひとまとめに主催者として扱います。
 主催者(主催者名、主催者HP、運営メンバー、…)
 イベント(イベントコード、イベント名、各種レギュレーション、…)
2つのエンティティ、「主催者」(例:MMD杯運営委員会)と「イベント」(例:第9回MMD杯)が識別でき、主催者がイベントを企画・開催するという動作から、「主催者→イベント」のリレーションが認識できます。

このイベントに参加するニコニコ動画会員は、動画を投稿します。ここで、動画を投稿するニコニコ動画会員を投稿者と呼ぶことにします。
 投稿者(ニコニコ動画会員ID、ニックネーム、…)
 動画(動画ID、タイトル、投稿者ID、タグ、…)
2つのエンティティ、「投稿者」と「動画」が識別でき、動画を投稿するという動作から、「投稿者→動画」のリレーションが認識できます。

イベントの主催者は、参加動画を管理するためにイベントのマイリストを作成し、イベントに参加した動画をそのマイリストに登録します。
 イベントマイリスト(マイリストID、マイリスト名、…)
新たなエンティティ、「イベントマイリスト」が識別でき、イベント用にマイリストを作る動作から、「イベント→イベントマイリスト」、参加動画をマイリストに登録する動作から、「イベントマイリスト→動画」のリレーションが認識できます。

イベントの参加動画が公開されると、ニコニコ動画会員は動画を視聴し、お気に入りの動画をマイリストに登録します。ここで、動画を視聴するニコニコ動画会員を視聴者と呼ぶことにします。
 視聴者(ニコニコ動画会員ID、ニックネーム、…)
 視聴者マイリスト(マイリストID、マイリスト名、…)
2つのエンティティ、「視聴者」と「視聴者マイリスト」が識別でき、参加動画をマイリストに登録する動作から、「視聴者マイリスト→動画」のリレーションが認識できます。また、視聴者マイリストは視聴者毎にあらかじめ設定されているか、あるいは、視聴者が作成するものであるため、「視聴者→視聴者マイリスト」のリレーションが認識できます。
また、視聴者が動画を再生・コメント・マイリスト登録したことを、時系列に記録するため、「再生数等履歴」を設定しておきます。(これは、概念データモデルの範囲ではないかもしれない)

イベントの投票機関が終了したら、参加動画のマイリスト数や、動画の内容を元に評価し、授賞します。
 賞(イベントコード、賞、受賞動画ID、…)
新たなエンティティ、「賞」が識別でき、動画に対して賞を授ける動作から、「賞→動画」のリレーションが認識できます。また、賞は、イベント毎に設定しておくものであるため、「イベント→賞」のリレーションが認識できます。

この他、以下のリレーションも認識できます。
・第9回MMD杯参加動画は、MMDFes2012など、他のイベントにもエントリーすることができる。従って「動画→イベントマイリスト」。
・1つの動画が、同じイベントの複数の賞を受賞することがある。従って「動画→賞」。
この結果、多対多のリレーションが出来るため、連関エンティティが必要になりますが、ここでは省略しておきます。

以上をまとめて、概念データモデルのE-R図が出来ました。
Angel-CUP:概念データモデル

参考として、第9回MMD杯で使ったAngel-CUPの実装と比較してみます。
・オレンジ色の角丸四角の領域で示される部分、主催者・イベント・イベントマイリストにまたがる部分は、eventcode/setting.phpで実装されています。(ここでeventcodeは、"mmdcup9"など、実施のイベントの識別子)
・ピンク色の角丸四角の領域で示される部分、イベントマイリスト・動画・投稿者にまたがる部分は、videolistテーブルで実装されています。

[補足]
※この概念データモデルでは、以下の点については、考慮していません。
・主催者と運営メンバーの関係
・予選と本選の関係
・マイリスト投票ではない評価方法

※説明文の記述として、エンティティとリレーションシップを、ほぼ同時に定義していますが、実際の手順では、エンティティの識別とリレーションシップの認識を繰り返して完成させます。
また、以下の点は省略し、論理データモデルで検討します。
・エンティティの識別子
・多対多のリレーションを連関エンティティを使って分解

次回、「論理データモデル」に続く、予定。


[2012/10/1:訂正]
論理データモデル検討中に、概念データモデルの間違いに気づきました。

1)リレーションの追加:「動画→視聴者マイリスト」
「動画」は、複数の「視聴者マイリスト」に登録されます。
E-R図差し替え済み。

2)「イベントマイリスト」および「視聴者マイリスト」と「動画」のリレーションが、多:多となっているのは、「マイリスト明細」と呼べるエンティティの検討が抜けているためです。「動画」を「マイリスト」に登録すると、「マイリスト明細」が作られ、2つのリレーション「マイリスト→マイリスト明細」「動画→マイリスト明細」が同時に発生します。
エンティティ「マイリスト明細」は、論理データモデル検討時に「マイリスト」を正規化すると、存在が明らかになります。

« テーマミス対策の詳細 | トップページ | 論理データモデル »

Angel-CUP」カテゴリの記事

コメント

コメントを書く

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

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

トラックバック

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

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

» 論理データモデル [システム屋って何だっけ]
第10回MMD杯の準備が進んでいるようです。 概念データモデルの段階でモタモタしている場合ではありません。 今回は、論理データモデルをつくりましょう。 教科書通 [続きを読む]

« テーマミス対策の詳細 | トップページ | 論理データモデル »

ウェブページ

儲かる?