このページの本文へ

前へ 1 2 3 次へ

女子大生とゼロから学ぶ データベースの基礎 第2回

リレーショナルの名前やドメイン、正規化や代数演算とは?

「由美ちゃん、これがRDBの要素だよ」(先生)

2010年01月21日 09時00分更新

文● 樋口千洋

  • この記事をはてなブックマークに追加
  • 本文印刷

リレーションの構成は簡潔な組み合わせにしよう

先生:ところで入学用品とか、鉛筆や筆入れなどをセットで販売する場合がありますよね。それをリレーションで定義してみてください。

お父さん:こうですか?(表2)

表2●入学用品セットのリレーション

先生:そうですね。表計算ソフトだとこうした表現でよかったのですが、リレーションはできるだけ単純な組み合わせで表現します。この単純化を行なう作業を「正規化」といいます。正規化するとさっきのリレーションは、表3のような2つのリレーションに置き換えられます。ここでは複数の商品を含むセットを、セットと商品名のリレーションと、セットが含む商品のリレーションに分けました。

表3●入学用品セットのリレーションを正規化された2つのリレーションに分解

由美:なるほど、こうすると1つのタプルに入る商品は1つずつになりますね。

先生:そういうことです。もし表2のままだと、内容属性のドメインの定義ができません。これを2つに分けるだけで、内容のドメインは「商品番号に含まれるもの」でよいことになります。

 この正規化の本来の目的は、1つの事実がデータベースの1カ所にしか出てこないようにすることです。もし「鉛筆は100円」といった内容がデータベースのあちこちに分散していると、単価を変えたときに非常にややこしいことになりますよね。正規化は、データベースの一貫性を保つ意味でも効率的なんです。この正規化には、「第一正規形」や「第二正規形」などのいくつかの段階があるのですが、難しいので今回は割愛することにします。

リレーショナル代数演算でいろいろな表を作る

先生:さて、こうして単純化したリレーションを組み合わせると、いろいろな表が作れるようになります。これにはリレーショナル代数演算を知らないといけません。

由美:代数というと四則演算ということでしょうか?

先生:この場合は、リレーションが対象なので少し違います。和、差、直積に加えて射影、選択、結合という論理的な操作が定義されています。

お父さん:和、差というのはそれぞれのリレーションの要素の足し算や引き算と考えればいいのですか?

由美:ベン図を書けばいいのね(図5)。そうすると直積というのは両者の共通部分ということね。

図5●ベン図で表わした「和」「差」「直積」

先生:その通りです。和はタプルの足し算と思ってもらえばいいのですが、両者で重複する部分は省かれます。差については、どちらからどちらを引くかで結果が異なってきます。

お父さん:射影、選択、結合というのはなんだか難しそうに聞こえますね。

先生:はい、でもそんなに難しい概念ではないので順に見ていきましょう。射影というのは、指定した属性だけを抽出する操作になります。たとえば先の商品リレーションで、商品名という属性の列だけを取り出すようなことです。

お父さん:なんだ、そんなに難しい話じゃないですね。

先生:選択は各タプルから条件に合うものだけを抽出する操作をいいます。属性の値に対して一致するものや一致しないものを選択したり、数値の場合は大小比較が可能になります(図6)。

図6●抽出操作の概念

お父さん:なるほど。こういう操作ができると、表計算ソフトでシートを組み合わせて新しい表を作ろうと四苦八苦していたことが簡単になるんですね。

先生:今度SQLを説明するときにお話ししますが、データベースを使うと、商品別にグループ化したり、それぞれの集計を取るということが簡単にできるようになります。

由美:結合というと前回商品データと顧客データから納品データを作成したように2つのリレーションを関連付けて、新たなリレーションを作ることですか?

先生:冴えてますね。その通りです。特定の属性の値を2つのリレーションで比較して、条件を満たすタプル同士を結合します。比較条件がイコールの場合を「等結合」と呼んでいます(図7)。

図7●商品リレーションと卸取り扱いリレーションを商品名で等結合

由美:X商会が消しゴムと鉛筆を扱っているので図7のようになるのは分かるのですが、(A3、筆入れ)というタプルが結合できずに余っちゃいますね。

先生:そうです。こういう結合を自然結合、または内部結合といいます。また結合の相手がいないタプルを「結合不能タプル」と呼んでいます。

お父さん:内部結合ということは外部結合もあるのですか?

先生:はい、外部結合の場合は結合不能タプルの扱いが違います。上の場合だと、卸元名を空値としてリレーションを作成します(図8)。

図8●外部結合では空値のタプルも含まれる

お父さん:なるほど。あ、また時間が来てしまいましたね。

先生:では次回は索引とトランザクションについてのお話をすることにしましょう。

お父さん・由美:よろしくお願いします。

前へ 1 2 3 次へ

カテゴリートップへ

この連載の記事
  • 角川アスキー総合研究所
  • アスキーカード