XMLデータベース開発方法論(4) Page 4/4

20-80ルールでざっくりXMLデータベース設計


川俣 晶
株式会社ピーデー
2005/9/22

重複の除去

 同じ情報を繰り返し書き込むことは避けるべきである。例えば、以下のXML断片を見てみよう。カテゴリ別に複数の名簿を記述しているが、途中で職業を変えた者は重複して記述されてしまっている。

<名簿 カテゴリ="野球選手">
 <個人>
  <名前>ツワブキサンシロー</名前>
  <性別>男性</性別>
 </個人>
 <個人>
  <名前>番場蛮</名前>
  <性別>男性</性別>
 </個人>
</名簿>
<名簿 カテゴリ="パイロット">
 <個人>
  <名前>ツワブキサンシロー</名前>
  <性別>男性</性別>
 </個人>
 <個人>
  <名前>鷲尾健太郎</名前>
  <性別>男性</性別>
 </個人>
</名簿>

 このような内容は好ましいものではない。例えばツワブキサンシローの情報を更新するためには、彼に関して書かれたすべてを正しく更新しなければならず、しかも更新中に参照された場合、野球選手のツワブキサンシローと、パイロットのツワブキサンシローに関して異なる情報を返してしまう可能性もある。これを防止するためにデータベースの広範囲を長時間ロックすると、ほかの処理が遅延する可能性もある。

 このような問題を回避するために、重複を排除することが望ましい。例えば、以下は重複を排除する書き換えの一例である。

<名簿>
 <個人>
  <名前>ツワブキサンシロー</名前>
  <カテゴリ>野球選手</カテゴリ>
  <カテゴリ>パイロット</カテゴリ>
  <性別>男性</性別>
 </個人>
 <個人>
  <名前>番場蛮</名前>
  <カテゴリ>野球選手</カテゴリ>
  <性別>男性</性別>
 </個人>
 <個人>
  <名前>鷲尾健太郎</名前>
  <カテゴリ>パイロット</カテゴリ>
  <性別>男性</性別>
 </個人>
</名簿>

 この例では、カテゴリ指定された名簿要素の下に個人要素を配するのをやめ、個人要素の子要素としてカテゴリを指定するようにしている。カテゴリ要素の値により選択的に個人要素を集めるクエリを記述すれば、特定カテゴリに属する個人のリストは容易に得られるので、このような構造でも問題はないだろう。しかし、これは重複を排除する書き換えの一例でしかない。個々人にIDを与えて、IDを参照するリストをカテゴリのリストとして使うなど、ほかの選択も当然あり得るだろう。

分割と階層化を行う

 扱う情報が多い場合は、単に扱いやすくするという目的のために、それらを分類して分割と階層化を行う価値がある。例えば、以下のような文書があるとしよう。本当はもっと複雑で大きな文書であると思って見ていただきたい。

<文書>
<タイトル>今日の話題</タイトル>
<著者>吹雪今日子</著者>
<見出し>今日の天気</見出し>
<段落>本日は晴天なり</段落>
<見出し>今日の棋譜</見出し>
<段落>7二飛車なり</段落>
</文書>

 さて、このような文書は、そのまま扱ってもよいのだが、文書要素の子要素が多すぎて把握するのが大変だと思ったとしよう。このようなとき、子要素を分類し、分割し、階層を付けることで、問題を単純化することができる。例えば、この例の場合は、タイトルと著者は書誌情報(文書に関するメタ情報)であり、見出し要素と段落要素が文書本文だとすると、書誌情報要素と本文要素によって分割と階層化を行うことができる。

<文書>
 <書誌情報>
  <タイトル>今日の話題</タイトル>
  <著者>吹雪今日子</著者>
 </書誌情報>
 <本文>
  <見出し>今日の天気</見出し>
  <段落>本日は晴天なり</段落>
  <見出し>今日の棋譜</見出し>
  <段落>7二飛車なり</段落>
 </本文>
</文書>

 このように子要素を分割し、階層化することで、把握すべき対象が小さくなり、分かりやすく、扱いやすくなる。

 さて、ここまで述べた基本設計ノウハウはまだまだ序の口であり、語りたいことは多い。しかし、残念ながら今回はここまでである。続きは次回をお待ちいただきたい。(次回へ続く)

4/4  

 Index
XMLデータベース開発方法論(4)
20-80ルールでざっくりXMLデータベース設計
  Page 1
・前回のおさらいと今回のテーマ
・XMLとは何を示すか
  Page 2
・XMLデータモデルとは何か
・XMLデータモデルの特徴
・XMLデータベース設計における20-80ルール
  Page 3
・分かりやすい要素名、属性名
・一貫した名前
・関連する情報をグループ化する
Page 4
・重複の除去
・分割と階層化を行う


XMLデータベース開発論


Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間