Skip to main content

English

Japan

【第4回】データモデルを読む ― サブタイプ ―

ER図は多対多の関係は表現できず、1対多の関係であることを前回説明しました。それでは、残る一つの可能性、1対1の関係はどのように考えたらよいのでしょうか。

2つ(あるいはそれ以上)の表の行が1対1で対応しているなら、それは2つの表ではなく、横につながった一つの表でしょう、というのが一番シンプルな答えです。1対1対応なら共通な主キーがあります。一方の表の行を一通りに識別できるのなら、もう一方の表の行も同じ主キーで識別できているはずだからです。

それでもモデルを作る人はしばしば1対1の関係を表現します。いろいろな理由があるのですが、主なものは、表の中の一部のタプルだけに関わる列や関係を表現したい場合や、表に含まれるタプルの「種類」を明示することによって表が現そうとしている「意味の範囲」を明示しようとする場合です。後者はER図ではなくデータディクショナリに書くべきものだと言えなくもありませんが、ER図の可読性を高めるために、場合によっては有効な手法です。

modelingNo4-1

たとえばこのような場合、【図書】と【訳書】、【図書】と【原書】の関係は、それぞれ1対1です。(【原書】は著者が書いた言語で出版された【図書】、というくらいに考えてください。日本語で書かれて日本語で出版された【図書】は【原書】です。)図中、

modelingNo4-2

という記号が現れますが、白い丸の上につながっている表(この場合【図書】)を”スーパータイプ”横棒の下につながっている表(この場合【訳書】【原書】)を”サブタイプ”と呼びます。サブタイプはスーパータイプに含まれ、言い換えるとスーパータイプの「一種」です。【訳書】は【図書】に含まれ、【訳書】は【図書】の一種です。【原書】についても同じことがいえます。

ただし、【訳書】の方だけに【訳者】との間に【翻訳】という交差表ができます。(【訳者】は複数の【図書】を【翻訳】します。一つの【図書】を共同して、あるいは分担して複数の【訳者】が【翻訳】することもあります。多対多の関係を1対多の関係で表現するために交差という表現法を使うのでした。前回の記事を思い出してください。)この関係は【原書】の方には発生しません。 スーパータイプがどのようにサブタイプに分けられているかという関係には、4つのパターンがあります。

  1. 漏れなく重複なく分割されている場合(確定的+排他的)
  2. 漏れがあるが重複がない場合(未確定的+排他的)
  3. 漏れなく分割されているが重複がある場合(確定的+包括的)
  4. 漏れと重複がある場合(未確定的+包括的)

「未確定的」という言葉は、スーパータイプの中に既知のサブタイプに分類できないタプルがあるから他にもサブタイプがあるのではないか、という意味で使われています。「包括的」という言い方はあまりよい言葉の選択ではないと思いますが、ここでは慣用に従っておきます。IDEF1X記法では、3を除く残り3つのパターンを表現できます。

前に掲げた【訳書】と【原書】は、確定的でかつ排他的なサブタイプです。全ての【図書】は必ず【訳書】であるか【原書】である(確定的)かつ、【訳書】であり同時に【原書】である【図書】は存在しない(排他的)からです。

modelingNo4-3

例えば【図書】に【文庫判】【新書判】というサブタイプをつけてみましょう。(これは【図書】のサイズに関する規格を表します。)ただし、【文庫判】【新書判】以外にも【図書】は存在し(未確定的)、【文庫判】であり同時に【新書判】である【図書】はありません(排他的)。

未確定的サブタイプの表記法は

modelingNo4-4

という記号を使います。(○の下ある横棒が一本か二本かの違いですね。)

漏れと重複がある場合(未確定的+包括的)は、例えば【図書】に【訳書】と【文庫判】というサブタイプをつける(上の例から【原書】と【新書判】の表を除く)ことを考えてみたらよいでしょう。【訳書】か【原書】か、という分け方と、【文庫判】か【新書判】か(あるいはそれ以外か)という分け方は、別の分け方です。(こういう「分け方」をカテゴリーとか範疇とか呼びます。)【文庫判】ではない【原書】もあるので、漏れがあり、【文庫判】の【訳書】があるので重複もあります。【原書】というサブタイプがなくなった場合、【訳書】は未確定的サブタイプになることに注意してください。

表の定義そのものの読み方は、表がスーパータイプであろうとサブタイプであろうと変わりません。連載第2回の【図書】読み方を思い出してください。これにならって【訳書】の表を読むと、

ドメイン制約

modelingNo4-5

主キー制約

modelingNo4-6

【原書】の表が現している内容もこれと同じく読み下すことができます。

スーパータイプ、サブタイプの読み方の特徴は、関係の読み方にあります。「1対1」なので「1対多」よりもすこし複雑な読み方になります。

●確定的で排他的な場合

【図書】と【訳書】の関係を日本語であらわすと、

modelingNo4-7

ここまでは「1対多」の関係の読み方と同じです。【図書】と【原書】の関係もこれと同じです。【図書】【訳書】【原書】3者の関係として、

modelingNo4-8

これは確定的サブタイプを表現しています。「どちらか一方だけがある」と言う言い方で、【訳書】と【原書】の両方が存在する可能性は否定されているので排他的サブタイプになります。【訳書】または【原書】に該当する行がいくつあるかは、この中では何も言っていませんが、表の読み方を考えたときに作った、主キー制約がありますから、《表題》と《発行年月日》を決めてしまえば該当する行は高々1行しかありません。

●未確定的で排他的な場合

未確定的サブタイプの読み方を考えるために【図書】と【文庫判】の関係をみると、

modelingNo4-9

これは「1対多」の読み方と同じです。同じ関係が【図書】と【新書判】の間にも成り立ちます。加えて、【図書】【文庫判】【新書判】3者の関係として、

modelingNo4-10

未確定的サブタイプなので、スーパータイプに対応する行がサブタイプにあるかどうかは「可能性がある」という表現の仕方しかありません。また排他的なサブタイプなので、【図書】に対応する行があるとすれば【文庫判】か【新書判】のいずれか一方だけです。

●未確定的で包括的な場合

上で書いたように、【図書】に【訳書】と【文庫判】というサブタイプがあると考えてみましょう。

modelingNo4-11

modelingNo4-12

この2つの命題に加えて、

modelingNo4-13

modelingNo4-14

この4種類の命題は、【訳書】でありかつ【文庫判】である【図書】の存在も、【訳書】でもなく【文庫判】でもない【図書】の存在も許容します。

ご意見募集

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

 

Index