
前回はデータベース方式を勉強したっすが、膨大なデータをいきなりテーブルにしてデータベースを作るってことは難しいんすね。

たしかにそうだよね。ただデータを表にするだけだったら誰も苦労しないよ。

どういった目的で、だれが何のために、どのような情報をどう使うか、といったことなどを考えて設計しないと駄目なんすよ。
| 目標 | ・データの分析・設計の考え方を理解する。 |
| 説明 | ・データの分析・設計の必要性や,その基本的なプロセスを理解する。 |
データ分析
データベースでは、単にデータ(情報)を保存するだけでなく、それらを効率的かつ有効に活用できることを目的としています。そのためには必要なデータを正確な形式で蓄積することが必要不可欠となります。
そこで、データの質を向上させるために、対象となる業務を分析したうえで、業務で使用するデータの洗出しと整理を行います。このプロセスにおいて、不正確、不完全、重複、または不適切なデータを特定して修正または削除する作業を行いますが、この作業のことをデータクレンジングと呼びます。

このプロセスを正確に行わないと、せっかく蓄積したデータを活用できないといった事態が起こるっすよ。
DBMS(データベース管理システム)におけるインデックスとは、データ検索を高速化するためのデータ構造です。インデックスは本の索引のようなもので、大量のデータから目的の情報を素早く探し出すために使われます。インデックスがあると、DBMSはそのインデックスを使って該当するデータの場所を直接特定し、検索時間を短縮できます。
データベースの設計
E-R図(実態関連図)
データベース設計とは、情報を効率的かつ一貫性のある形で保存・管理・検索するために、データベースの構造を計画・設計するプロセスです。このプロセスにおいては、E-R図(実態関連図)を用いてデータ同士の関連性を整理します。
E-R図は、データベース設計において実体(Entity:エンティティ)とその関係(Relationship:リレーションシップ)を視覚的に表現する図です。
エンティティは管理すべき「もの」や「概念」を表し、リレーションシップはエンティティ同士の関連を表します。また、リレーションシップは「1対1」、「1対多」、「多対多」の多重度をもちます。

データの正規化
関係データベースにおける正規化は、データの冗長性(重複・ムダ)を排除し、データの整合性を保つための設計手法です。データを効率的に管理し、更新・検索時の矛盾を防ぐために使用されます。正規化には内容によって段階が存在します。
次のような正規化されていないテーブルで考えてみましょう。
| 注文番号 | 顧客名 | 商品名 | 値段 | 市区町村 | 郵便番号 |
|---|---|---|---|---|---|
| 001 | たろう | りんご,バナナ | 100,150 | 板橋区 | 123-4567 |
第1正規形(1つの列に単一の情報)
繰り返しをなくして、各セルを単一の値にします。今の表では、「商品名」と「値段」の1つの列に2つの情報が入っているため、別の行に分けて繰り返しをなくします。
| 注文番号 | 顧客名 | 商品名 | 値段 | 市区町村 | 郵便番号 |
|---|---|---|---|---|---|
| 001 | たろう | りんご | 100円 | 板橋区 | 173-0001 |
| 001 | たろう | バナナ | 150円 | 板橋区 | 173-0001 |
第2正規形(くり返しの情報を別にする)
今は、同じ注文番号「001」で「たろう」「板橋区」「173-0001」という情報が2行に出てきます。表を分けることによって、このムダを排除します(2つの表は「注文番号」で紐づけます)。
| 注文番号 | 顧客名 | 市区町村 | 郵便番号 |
|---|---|---|---|
| 001 | たろう | 板橋区 | 173-0001 |
| 注文番号 | 商品名 | 値段 |
|---|---|---|
| 001 | りんご | 100円 |
| 001 | バナナ | 150円 |

こうすることで、「たろう=板橋区=173-0001」の情報を1回だけ書けばよくなるっすね。これが第2正規形っす。
第3正規形(関係ない情報も分ける)
「板橋区=173-0001」というのは、市区町村と郵便番号の関係であって、注文そのもの(注文番号)とは直接関係ありません。しかも、市町村が分かれば郵便番号も自動的に決まります。よって、冗長性を排除するためにその情報も別の表に分けます(2つの表は「市区町村」で紐づけます)。
| 注文番号 | 顧客名 | 市区町村 |
|---|---|---|
| 001 | たろう | 板橋区 |
| 注文番号 | 商品名 | 値段 |
|---|---|---|
| 001 | りんご | 100円 |
| 001 | バナナ | 150円 |
| 市区町村 | 郵便番号 |
|---|---|
| 板橋区 | 173-0001 |
確認○×問題
データベース設計におけるデータ分析で行うこととしては、「必要なデータ項目を洗い出し、項目間の関連を整理する」といったことが挙げられる。
(出典:令和7年度春期分 問95一部改変)
答え:〇
記述の通りです。
データベース設計の前段階として、データ分析を行います。データの質を向上させるために、業務で使用するデータの洗出しと整理を行い、不正確、不完全、重複、または不適切なデータを特定して修正または削除する作業を行います。この作業のことをデータクレンジングと呼びます。
E-R図では、処理手順などのアルゴリズムを図で表記する。
(出典:平成29年度春期分 問87一部改変)
答え:×
E-R図では、データベースの設計に当たって、データ間(エンティティ同士)の関係を表記します。なお、設問の文章はフローチャートの説明になります。
出版社←著者→本
となる。
[条件]①出版社は、複数の著者と契約している。
②著者は、一つの出版社とだけ契約している。
③著者は、複数の本を書いている。
④1冊の本は、1人の著者が書いている。
ここで、E−R図の表記法は次のとおりとする。
[表記法]aとbが、1対多の関係であることを表す。
(出典:令和3年度春期分 問70一部改変)
答え:×
出版社→著者
となります。
著者→本
となります。
以上より、出版社と著者と本の関係を示すE−R図は
が適切な表記です。
関係データベースを構築する際にデータの正規化を行う目的は、データに冗長性をもたせて、データ誤りを検出することにある。
(出典:平成31年度春期分 問92一部改変)
答え:×
関係データベースを構築する際にデータの正規化を行う目的は、データの矛盾や重複を排除して、データの維持管理を容易にすることにあります。むしろ、データの冗長性を排除することが目的なので、設問の記述は誤りです。
関係データベースで管理された”会員管理”表を正規化して、”店舗”表、”会員種別”表及び”会員”表に分割した。このとき、”会員”表は次のようになる。ここで、表中の下線は主キーを表し、一人の会員が複数の店舗に登録した場合は、会員番号を店舗ごとに付与するものとする。
| 店舗コード | 会員番号 | 会員名 |

(出典:令和5年度春期分 問59一部改変)
答え:×
【第1正規形(1つの列に単一の情報)】
繰り返しの項目を排除し表の構造をシンプルにするため、すべての列が単一の値で構成されている状態にします。設問の会員管理表は繰り返しの項目がないため、この作業は不要です。
【第2正規形(くり返しの情報を別にする)】
同じ「店舗コード」で「店舗名」が複数表出てくる(「001」で「札幌」が、「002」で「東京」がそれぞれ2行出てくる)ため、これを別の表に分離します。
なお、設問中に「会員番号を店舗ごとに付与する」とあるため、「会員番号」のみでは会員名を特定することはできないので、これを分離することはできません。
| 店舗コード | 会員番号 | 会員名 | 会員種別コード | 会員種別名 |
|---|---|---|---|---|
| 001 | 1 | 試験花子 | 02 | ゴールド |
| 001 | 2 | 情報太郎 | 02 | ゴールド |
| 002 | 1 | 高度次郎 | 03 | 一般 |
| 002 | 2 | 午前桜子 | 01 | プラチナ |
| 003 | 1 | 午前桜子 | 03 | 一般 |
| 店舗コード | 店舗名 |
|---|---|
| 001 | 札幌 |
| 002 | 東京 |
| 003 | 大阪 |
【第3正規形(関係ない情報も分ける)】
会員種別は主キーである「店舗コード」や「会員番号」とは直接関係ありません。そこで、これも別の表に分離します。
| 店舗コード | 会員番号 | 会員名 | 会員種別コード |
|---|---|---|---|
| 001 | 1 | 試験花子 | 02 |
| 001 | 2 | 情報太郎 | 02 |
| 002 | 1 | 高度次郎 | 03 |
| 002 | 2 | 午前桜子 | 01 |
| 003 | 1 | 午前桜子 | 03 |
| 店舗コード | 店舗コード |
|---|---|
| 001 | 札幌 |
| 002 | 東京 |
| 003 | 大阪 |
| 会員種別コード | 会員種別名 |
|---|---|
| 01 | プラチナ |
| 02 | ゴールド |
| 03 | 一般 |
以上より、”会員”表は次のようになります。
| 店舗コード | 会員番号 | 会員名 | 会員種別コード |
一つの表で管理されていた受注データを、受注に関する情報と商品に関する情報に分割して、正規化を行った上で関係データベースの表で管理する。ここで、同一商品で単価が異なるときは商品番号も異なるものとする。また、発注者名には同姓同名はいないものとする。

このとき、正規化を行った結果の表の組合せは次のようになる。

(出典:令和6年度春期分 問81一部改変)
答え:〇
【第1正規形(1つの列に単一の情報)】
繰り返しの項目を排除し表の構造をシンプルにするため、すべての列が単一の値で構成されている状態にします。設問の受注データ表は繰り返しの項目がないため、この作業は不要です。
【第2正規形(くり返しの情報を別にする)】
同じ「受注番号」で複数の行に同一の情報がない(主キーが単一)のため、この作業は不要です。
【第3正規形(関係ない情報も分ける)】
「商品番号=商品名=単価」という関係は、注文そのものとは直接関係ありません。したがって、これも別の表に分けます。
| 受注番号 | 発注者名 | 商品番号 | 個数 |
|---|---|---|---|
| T0001 | 試験花子 | M0001 | 5 |
| T0002 | 情報太郎 | M0002 | 3 |
| T0003 | 高度秋子 | M0001 | 2 |
| 商品番号 | 商品名 | 単価 |
|---|---|---|
| M0001 | 商品1 | 3,000 |
| M0002 | 商品2 | 4,000 |
以上より、正規化を行った結果の表の組合せは次のようになります。
| 受注番号 | 発注者名 | 商品番号 | 個数 |
| 商品番号 | 商品名 | 単価 |

