« 概念データモデル | トップページ | 物理データモデル »

2012年10月12日 (金)

論理データモデル

第10回MMD杯の準備が進んでいるようです。
概念データモデルの段階でモタモタしている場合ではありません。
今回は、論理データモデルをつくりましょう。
教科書通りに、順に正規化していく手順ではなく、より実戦形式の手順で進めます。

まず、前回の概念データモデルを振り返って、リレーションが「多:多」となっているところに着目します。

「イベントマイリスト」と「視聴者マイリスト」が、「動画」と「多:多」の関係にあります。ここで、「動画」との関係の範囲では、「イベントマイリスト」と「視聴者マイリスト」は同じとみなして良さそうなので、以降は「マイリスト」として検討します。
1つの「マイリスト」には、複数の「動画」を登録することが出来、それぞれにマイリストコメントをつけることができます。
 マイリスト(マイリストID、マイリスト名称、動画ID1、マイリストコメント1、動画ID2、マイリストコメント2、...)
概念データモデルでは「マイリスト」を1つのエンティティとしていましたが、このままでは繰返し項目を含む非正規形ですので、「マイリスト」と「マイリスト明細」に分解します。
 マイリスト(マイリストID、マイリスト名称、...)
 マイリスト明細(マイリストID、マイリスト明細No.、動画ID、マイリストコメント、...)
この様に「マイリスト」を明細のある親子関係のエンティティに分けると、動画を「マイリスト」に登録するアクションにより、「マイリスト→マイリスト明細」の親子関係が生じ、同時に、動画がマイリストに登録されることで「動画→マイリスト明細」の関係が生じることがわかります。

「賞」と「動画」のリレーションが「多:多」となっているのは、同じ賞を複数の動画が受賞する可能性があるためで、「賞」に「動画」への外部キーを設定すると繰返し項目となってしまいます。
 賞(イベントコード、賞No.、賞名称、受賞動画ID1、受賞動画ID2、...)
逆に、「動画」に「賞」への外部キーを設定しても、1つの動画が複数の賞を授賞する可能性があるため、やはり繰返し項目となってしまいます。ここは、主催者が各賞の動画を選定する「授賞」というアクションを考え、「賞」と「動画」の間に、連関エンティティを設定します。
 賞(イベントコード、賞No.、賞名称、...)
 授賞(イベントコード、賞No.、動画ID、授賞理由、...)
「動画」エンティティ側に、「賞」への外部キーを設定していた場合は、「受賞」というアクションで考えてもいいのですが、このシステムは、MMD杯の運営の方が使うものですので、「授賞」が自然です。

ここまで検討したところで、追加要件が入りました。
第10回MMD杯では、名称の長いテーマがあるので、テーマの正式名と略称の対応を管理したいそうです。第9回の様な最大3文字のテーマの場合は、独立したエンティティにする程でもなかったのですが、この要件に従ってエンティティ「テーマ」を追加しましょう。「イベント」および「動画」とのリレーションが生じます。

この後は、各エンティティの属性項目を洗い出し、正規化が不十分でないかチェックをして、論理データモデルの完成です。
ただし、今回は、論理データモデルを完成させてから物理データモデルに進むのではなく、やや乱暴なやり方ですが、物理データモデルを考慮して、検討の範囲を限定することにします。

まず、Angel-CUPのデータモデルは、ニコニコ動画のシステムを前提としていることを考慮します。データモデルの中には、既にニコニコ動画のシステムとして実装されている部分があり、それをAngel-CUPのデータベースにそのまま実装する必要はありません。Angel-CUPには、ニコニコ動画に対して何かを更新する機能はありませんので、ニコニコ動画のAPI等から取得できる情報を整理しておく程度の検討で十分です。

「投稿者」と「視聴者」は、どちらも「ニコニコ動画会員」のサブタイプであり、ニコニコ動画のシステムで管理されています。
「イベントマイリスト」と「視聴者マイリスト」は、どちらも「マイリスト」のサブタイプであり、「マイリスト明細」とともに、ニコニコ動画のシステムに実装されています。

「動画」も、当然、ニコニコ動画のシステムで管理されていますが、イベント参加時点での情報の保全や、システムのパフォーマンス等を考慮し、Angel-CUPにも同等のエンティティを実装します。もちろん、動画のすべてをAngel-CUPに実装する訳ではありません。

さて、「マイリスト」をAngel-CUPの実装対象外としてしまうと、Angel-CUP内でイベントと動画の関連を管理することができません。そもそも、Angel-CUPの様なシステムが必要となった背景は、MMD杯の参加動画が増え、1つのマイリストでは管理できなくなったため(マイリストの登録数制限=500)ですので、Angel-CUP上にイベントと動画の関連を管理するエンティティは必須です。このエンティティを「イベント参加動画」として定義し、Angel-CUP側に実装することにします。

概念データモデル検討にあたって、MMD杯の実際の運営業務を意識してしまったため、「イベント」と「動画」の関連を「マイリスト」で管理するデータモデルとなっていましたが、既存のものにとらわれずに考えれば、「イベント」と「動画」の連関エンティティである「イベント参加動画」が先にあって、それをニコ動のシステムで実現する手段が「マイリスト」だったということです。

では、Angel-CUPで実装する部分と、ニコ動で実装済の部分を色分けし、少し物理を意識した論理データモデルのE-R図の完成です。(主キーの項目名、カーディナリティやオプショナリティの表現は省略)
Angel-CUP:論理データモデル

次回は、このE-R図を元に、エンティティとリレーション詳細を検討し、物理設計まで進めていきます。

« 概念データモデル | トップページ | 物理データモデル »

Angel-CUP」カテゴリの記事

コメント

コメントを書く

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

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

トラックバック

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

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

« 概念データモデル | トップページ | 物理データモデル »

ウェブページ

儲かる?