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

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

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

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

データの正規化
関係データベースにおける正規化は、データの冗長性(重複・ムダ)を排除し、データの整合性を保つための設計手法です。データを効率的に管理し、更新・検索時の矛盾を防ぐために使用されます。正規化には内容によって段階が存在します。
次のような正規化されていないテーブル(学生と履修科目の情報)で考えてみましょう。
学生ID | 学生名 | 科目 | 教員 | 科目 | 教員 |
---|---|---|---|---|---|
1 | 山田 | 数学 | 佐藤 | 英語 | 鈴木 |
2 | 田中 | 数学 | 佐藤 | 国語 | 高橋 |
第1正規形
繰り返しの項目を排除し表の構造をシンプルにするため、すべての列が単一の値で構成されている状態にします。
学生ID | 学生名 | 科目 | 教員 |
---|---|---|---|
1 | 山田 | 数学 | 佐藤 |
1 | 山田 | 英語 | 鈴木 |
2 | 田中 | 数学 | 佐藤 |
2 | 田中 | 国語 | 高橋 |
第2正規形
複合主キーの一部にしか依存しない列を分離し、冗長性を排除します。このテーブルの主キーは学生IDと科目ですが、「学生名」は学生IDにだけ依存していて、科目には関係ありません。このような状態を部分関数従属といい、第2正規形では部分関数従属がない状態にします。

要するに、学生を特定するには学生IDだけあれば十分ということっす。なので、冗長性(ムダ)を排除するために学生情報を分離してやるっすよ。
学生ID | 学生名 |
---|---|
1 | 山田 |
2 | 田中 |
学生ID | 科目 | 教員 |
---|---|---|
1 | 数学 | 佐藤 |
1 | 英語 | 鈴木 |
2 | 数学 | 佐藤 |
2 | 国語 | 高橋 |
第3正規形
非キー属性(列)が他の非キー属性(列)に依存している状態を推移的関数従属といいます。
「教員」は「科目」に依存しているため、科目 →教員という推移的関数従属があります。第3正規形では、この推移的関数従属を排除します。
学生ID | 学生名 |
---|---|
1 | 山田 |
2 | 田中 |
科目 | 教員 |
---|---|
数学 | 佐藤 |
英語 | 鈴木 |
国語 | 高橋 |
学生ID | 科目 |
---|---|
1 | 数学 |
1 | 英語 |
2 | 数学 |
2 | 国語 |
確認○×問題
データベース設計におけるデータ分析で行うこととしては、「必要なデータ項目を洗い出し、項目間の関連を整理する」といったことが挙げられる。
(出典:令和7年度春期分 問95一部改変)
答え:〇
記述の通りです。
データベース設計の前段階として、データ分析を行います。データの質を向上させるために、業務で使用するデータの洗出しと整理を行い、不正確、不完全、重複、または不適切なデータを特定して修正または削除する作業を行います。この作業のことをデータクレンジングと呼びます。
E-R図では、処理手順などのアルゴリズムを図で表記する。
(出典:平成29年度春期分 問87一部改変)
答え:×
E-R図では、データベースの設計に当たって、データ間(エンティティ同士)の関係を表記します。なお、設問の文章はフローチャートの説明になります。
出版社←著者→本
となる。
[条件]①出版社は、複数の著者と契約している。
②著者は、一つの出版社とだけ契約している。
③著者は、複数の本を書いている。
④1冊の本は、1人の著者が書いている。
ここで、E−R図の表記法は次のとおりとする。
[表記法]aとbが、1対多の関係であることを表す。
(出典:令和3年度春期分 問70一部改変)
答え:×
出版社→著者
となります。
著者→本
となります。
以上より、出版社と著者と本の関係を示すE−R図は
が適切な表記です。
関係データベースを構築する際にデータの正規化を行う目的は、データに冗長性をもたせて、データ誤りを検出することにある。
(出典:平成31年度春期分 問92一部改変)
答え:×
関係データベースを構築する際にデータの正規化を行う目的は、データの矛盾や重複を排除して、データの維持管理を容易にすることにあります。むしろ、データの冗長性を排除することが目的なので、設問の記述は誤りです。
関係データベースで管理された”会員管理”表を正規化して、”店舗”表、”会員種別”表及び”会員”表に分割した。このとき、”会員”表は次のようになる。ここで、表中の下線は主キーを表し、一人の会員が複数の店舗に登録した場合は、会員番号を店舗ごとに付与するものとする。
店舗コード | 会員コード | 会員名 |

(出典:令和5年度春期分 問59一部改変)
答え:×
【第1正規化】
繰り返しの項目を排除し表の構造をシンプルにするため、すべての列が単一の値で構成されている状態にします。設問の会員管理表は繰り返しの項目がないため、この作業は不要です。
【第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正規化】
繰り返しの項目を排除し表の構造をシンプルにするため、すべての列が単一の値で構成されている状態にします。設問の受注データ表は繰り返しの項目がないため、この作業は不要です。
【第2正規化】
複合キーの一部にしか依存しない列を分離し、冗長性を排除します。「受注番号」のみがわかればレコードを特定できる(一意に識別できる)ため、主キーは「受注番号」となります。主キーが単一のため、この作業は不要です。
【第3正規化】
キー属性が他の非キー属性に依存している状態を排除して更新時の整合性を保ちます。非主キーの「商品番号」が分かれば「商品名」と「単価」が特定できるため、これを別表に分離します。
受注番号 | 発注者名 | 商品番号 | 個数 |
---|---|---|---|
T0001 | 試験花子 | M0001 | 5 |
T0002 | 情報太郎 | M0002 | 3 |
T0003 | 高度秋子 | M0001 | 2 |
商品番号 | 商品名 | 単価 |
---|---|---|
M0001 | 商品1 | 3,000 |
M0002 | 商品2 | 4,000 |
以上より、正規化を行った結果の表の組合せは次のようになります。
受注番号 | 発注者名 | 商品番号 | 個数 |
商品番号 | 商品名 | 単価 |