【第6回】データモデルパターン ― 網構造 その1 ―

前回に引き続き、データモデルのパターンについて説明します。今回は「網構造」を取り上げます。

「網」は「グラフ」と呼ばれることもあります。といっても折れ線グラフや棒グラフのことではありません。網は頂点と辺から構成されます。辺の両端には頂点があります。辺の途中に頂点はありません。(辺の途中に頂点を書きたくなったら、それは3つの頂点が2つの辺で結ばれている、ということです。)

辺には、向きが定義されている場合と無い場合があります。向きが定義されている場合は「有向グラフ」、定義されていない場合は「無向グラフ」と言います。(なぜか「有向網」「無向網」とは普通言いません。)


たとえば、Facebookの友達の関係はAさんとBさんが友達ならば、BさんとAさんも友達です。この場合は無向グラフで表せます。一方、Twitterのフォローの関係は、AさんがBさんをフォローしていても、BさんがAさんをフォローしているとは限らないので、有向グラフになります。AさんとBさんがお互いに相手をフォローしている場合は、AさんからBさんへの辺とBさんからAさんへの辺と2つの辺が存在することになります。有向グラフはこのほかにも、システム屋さんの世界では、状態遷移図やジョブ・スケジュールの中の先行/後続/並行関係など比較的頻繁に目にすることがあります。

木構造は親あるいは子と呼ばれる「頂点」が、親子関係という「辺」でつながっているという意味で網構造の一種です。木構造の場合の「辺」は“親→子”という向きが定義されていますので有向グラフになります。木構造の頂点に「入ってくる」辺は高々一つだけ。木構造の頂点から「出ていく」辺は任意の本数あります。一般の有向グラフにはこういう制約はありませんから、木構造は有向グラフの特殊な場合になります。


さて、まず有向グラフですが、ER図ではこのように表します。




このモデルは、【起点】【終点】を別々の表にして、


のように【辺】を交差表にしたモデルの【起点】【終点】を同一視したモデルと見ることもできます。

たとえばTwitterのフォローの関係では、このパターンの【頂点】は【アカウント】、【辺】は【フォロー】と読み換えることができます。


最初にあげたA、B、C、D4者のフォローの関係の場合、この表の中には次のようにデータが入ります。


【アカウント】


【フォロー】


A→CとC→Aの辺は、向きが違いますから別々の行で表されていることに注目してください。主キーは《フォローするアカウント》《フォローされるアカウント》の2つで定義されていますので、この2行はそれぞれ区別できているのです。

ER図の関係を表す線のそばに「フォローする」「フォローされる」という注記がついていることにお気づきだと思います。この場合「1対多」の「多」側の表の2つの主キーは「1」側の同じ主キーに対応します。2つの関係の線が、「多」側の列のどちらと結びついているかを示すため、この注記があります。

この注記は、全ての関係について記入されるべきものである、とする考え方もあります。「1」側の表を主語として、「多」側の表を目的語とする述語を注記するという考え方です。たとえば以前使った例で言うと、【出版社】と【図書】の関係に”出版する”と注記するという具合です。この考え方は、ER図の可読性を高めると言う点で、よいアイデアであるように見えます。

ところが、関係はいつも「1」側が主語、「多」側が目的語になっているとは限りません。【図書】と【著者】の間に【著作】という交差表を設けた場合、




【著者】は【著作】を”書く”

【図書】は【著作】により”書かれる”

この場合の【図書】は主語でしょうか?むしろ

【著者】は【図書】を”著作する”

の述語が【著作】という表になっていて、【図書】は目的語と考えるべきではないでしょうか。使役や受け身の表現を主語、目的語、述語の関係におきかえるのは、場合によってはかえってモデルの意味をわからなくしてしまうことになります。

もう一つ、【出版社】と【図書】の関係は”出版する”だけではありません。”再版する”とか”絶版にする”とか”回収する”かもしれません。これらの可能性はデータモデルが表現するというよりプロセスモデルが表現するべきもので、恣意的に「代表的な述語」をひとつER図に書き込むことはかえって理解を妨げることにもなりかねません。

というような見方もあって、ER図の関係に述語を注記することは必ずしも常に行われているわけではありません。この有向グラフパターンのように、並行する2つの関係を区別するときに、むしろ例外的に書き加えられるものだと考えてください。

無向グラフにはこれとは別のモデリングパターンがありますので、次回説明します。


ご意見募集

ここまでの内容で質問やコメントがある方は、 編集部までお問い合わせ下さい。
「入門」なのであまり高度な質問にはお答えできませんが、みなさまの役に立ちそうな内容については、この連載の中でとりあげたいと思います。

Index

ページの先頭へもどる