PREPARATION
受験対策

Silverの例題解説
「S1.2 リレーショナルデータベースに関する一般知識(データベースの設計と正規化)」

今回は、Silverの「S1 一般知識 - S1.2 リレーショナルデータベースに関する一般知識(データベースの設計と正規化)」からの出題です。

例題

1.17

以下は売上テーブルの一部だが、これを正規化したい。最も重要なものを2つ選びなさい。

  1. 日付に2/1が3回現れるなど重複があるので、別のテーブルに分離する。

  2. 同じ顧客が繰り返し現れるので、これを別のテーブルに分離する。

  3. 顧客名がわかれば顧客所在地がわかるので、この組み合わせを別のテーブルに分離する。

  4. 淀橋と野島は所在地が重複しているので、所在地を別のテーブルに分離する。

  5. 品目と数量の組み合わせを別のテーブルに分離する。

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2021年3月11日

解答と解説

テーブルの正規化はデータの重複を排除し、容量の削減や保守性の向上などの理由で非常に重要です。正規化のポイントは、テーブル内の同じ目的の列の繰り返しを分離することと、テーブル内の列に従属性がある部分を分離することです。

同じ目的の列とは、例題のテーブルでは品目と数量の組み合わせが、品目1、数量1、品目2、数量2…のような形式で繰り返され、テーブルが横に伸びるような構造になっていることで、第1正規形でこれを整理します。具体的には、売上明細テーブルを作成し、そこに品目と数量を保持します。2/1の淀橋のデータでは、売上テーブルに1行、売上明細テーブルには3行のデータが作られます。両方のテーブルに(例えば)売上番号という共通のキー列を作ることでこれらのデータを紐付けることができます。

列の従属性とは、ある列の値が決まれば、別の列の値が一意に決まる、ということです。その従属関係によって第2正規形、第3正規形などに分類されます。例題の売上テーブルでは、顧客名が決まれば顧客所在地も一意に決まりますから、顧客名と顧客所在地を保持する顧客テーブルを作成し、売上テーブルには顧客名だけを保持して、所在地については、顧客テーブルを参照する形式にします。これが第2正規形です。

重複排除と言われると、日付、顧客名、顧客所在地、品目などの欄に同じ値が何度も現れるのでこれを避けることのように思うかもしれませんが、重要なのは項目間の従属関係の有無です。日付や品目は他の項目との従属関係はありません。顧客名と顧客所在地の間には従属関係があるので正規化の対象となりますが、顧客名は他の項目に従属していませんし、複数の顧客の所在地が同じなのは単なる偶然なので従属関係はありません。

従って正解はCとEです。

現実には、顧客名の代わりに顧客IDを売上テーブルに保持し、顧客名については顧客テーブルを参照する形式が普通だと思いますが、売上テーブルに顧客IDと顧客名の両方を保持するのは正規化されていない状態、顧客名だけしか入っていないなら、それは顧客テーブルの主キーを何にするかという問題はあるものの、正規化はされている、と理解してください。

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システム、AIなどの
新領域での「PostgreSQL」の採用が拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定です

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。