3. データベース設計と正規化
データベース設計の留意点とメリット、異状、
正規化の基本概念、正規化の手法
1
URL: https://www.kkaneko.jp/de/ds/index.html
金子邦彦
謝辞:この資料では「いらすとや」のイラストを使用しています
データの整合性の保
データベース設計スキル
問題決能力
学びの過程は、新しい発見や視野の広がり、さらにはそれ
らがもたらす実益と直結しています。
2
アウトライン
1. リレーショナルデータベースの
概要と重要性
2. 冗長なデータの問題点
3. 異状
4. 正規化
5. テーブルの分割と結合
3
3-1. リレーショナルデータ
ベースの概要と重要性
4
データベースとは
5
データベースは、特定のテーマや目的に従って収集され
大量のデータ
取引
計測
データ収集
記入
データベース
撮影 データ保存
銀行、商店、交通機関、電話会社などさまざま
リレーショナルデータベースの仕組み
データをテーブルと呼ばれる表形式で保存
テーブル間関連で結ばれる。複雑な構造を持ったデータ
を効率的に管理することを可能に。
6
関連
テーブルと属性
7
テーブル
ID」と「商品名」と「
」の属性
テーブル名:商品
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
8
データベースの構築手順
テーブル定義
「こテーブルを使い
たい」と設定するだけなの
で、テーブルは
データベース
生成
最初,デー
タベースは
データ追加
データベース
設計
ID 購入
商品
ID
数量 ID 購入
商品
ID
数量
1
X
1
10
2
Y
2
5
ID 名前 単価
みかん
50
りんご
100
りんご
150
ID 名前 単価
リレーショナルデータベースの重要性
1. データの整合性: リレーショナルデータベースは、デー
タの整合性を保持するための機能を有する。これにより、
誤ったデータや矛盾したデータが保存されるのを防ぐこ
とができる。
2. 柔軟な問い合わせ(クエリ)能力: リレーショナルデー
タベースのSQLStructured Query Language)の使用に
より、複雑な検索やデータの抽出が可能になる。
3. トランザクションの機能: 一連の操作全体を一つの単位
として取り扱ことができる機能。これにより、データ
の一貫性と信頼性が向上する。
4. セキュリティ: アクセス権限の設定などにより、セキュ
リティを確保。
データの安全な保管、効率的なデータ検索・操作、ビジネス
や研究の意思決定をサポート。 9
3-2. 冗長なデータの問題点
10
冗長なデータ
11
このバスは運賃1000円です
このバスは運賃1000円です
冗長なデータ データベースとしては NG
「更新の際、すべての個所を更新しないといけない」
などの問題がある
名前
昼食
料金
A
そば
250
B
カレーライス
400
C
カレーライス
400
D
うどん
250
冗長なデータ
冗長なデーは、データベース内で不必要に重複し
て保存されるデータを指す。
12
そばは、250
カレーライスは、400
どんは、250
Aさんはそばを食べた
Bさんはカレーライスを食べた
Cさんはカレーライスを食べた
Dさんはどんを食べた
冗長なデータ
冗長なデータの問題点
データの更新の際、全ての重複箇所を更新しなければなら
、それが漏れるデータの不整合が生じる。(更新によ
る不整合
データベースのサイズが不必要に増大。
データの検索やクエリの実行速度が遅くなる可能性。
13
冗長なデータの更新
14
名前
昼食
料金
A
そば
250
B
カレーライス
400
C
カレーライス
400
D
うどん
250
更新
350
カレーライスが
400円か 350に値下
400」をすべて「350」に変更
350
名前
昼食
料金
A
そば
250
B
カレーライス
400
C
カレーライス
400
D
うどん
250
正規化前の問題
15
更新
350
カレーライスが
400円か 350に値下
昼食の値段が1つのはずなのに、
350, 400 の違った値段の記録が
あり、不整合がある
400」をすべて「350」に変更
する必要があるが、変更を間
違ったとする
冗長なデータの例
生徒の名前、生徒が所属するクラス、教科、成績を記録する
テーブル
16
生徒名
クラス
教科
成績
田中
3
A
数学
85
田中
3
A
英語
90
佐藤
3
B
数学
88
佐藤
3
B
英語
92
「生徒名」と「クラス」の情報
が冗長に繰り返されている
冗長なデータの例
17
会計A,窓口ーBが複数個所にあ
るのが冗長
ここまでのまとめ
冗長なデータの定義
不必要にデータベース内で重複して保存されるデータ
冗長なデータにより生じる主な問題
更新時の不整合全ての重複箇所を更新しないとデータの
不整合が生じる
例:書き換え漏れにより、朝食の値段が350円と400円の2
異なる価格で記録。不整合が生じている。
18
演習.冗長なデータ、デー
タの不整合
トピックス
冗長なデータの発見
データの不整合の確認
19
冗長なデータの発見
「商品注文データベース」の「注文」テーブルです。顧客名、
住所、商品名、価格、購入日などの属性があります。
同じ顧客からの異なる注文顧客名や住所が繰り返し登録さ
れていることを確認してください。それはどこですか?
| 注文ID | 顧客名 | 住所 | 商品名 | 価格 | 購入日 |
|-------|----------|--------------------|---------|-------|------------|
| 1 | 田中太郎 | 東京都中央区1-1-1 | テレビ | 50000 | 2023-10-01 |
| 2 | 田中太郎 | 東京都中央区1-1-1 | 冷蔵庫 | 100000| 2023-10-02 |
| 3 | 山田花子 | 大阪府北区2-2-2 | 洗濯機 | 30000 | 2023-10-03 |
| 4 | 田中太郎 | 東京都中央区1-1-1 | 掃除機 | 15000 | 2023-10-04 |
20
ヒン
まず、顧客名の列を順に見て、同じ顧客名複数回出するかど
かを確認します。
次に、じ顧客名の行見て、住所が同じであることを確認します。
顧客名や住所が複数回登録されている場合、そのデータは冗長で
と言えます
| 注文ID | 顧客名 | 住所 | 商品名 | 価格 | 購入日 |
|-------|----------|--------------------|---------|-------|------------|
| 1 | 田中太郎 | 東京都中央区1-1-1 | テレビ | 50000 | 2023-10-01 |
| 2 | 田中太郎 | 東京都中央区1-1-1 | 冷蔵庫 | 100000| 2023-10-02 |
| 3 | 山田花子 | 大阪府北区2-2-2 | 洗濯機 | 30000 | 2023-10-03 |
| 4 | 田中太郎 | 東京都中央区1-1-1 | 掃除機 | 15000 | 2023-10-04 |
21
解答例
注文ID 1, 2, 4において、顧客「田中太郎」の住所「東京都中央
1-1-1」が繰り返し登録されています。これは冗長なデータ
です。
| 注文ID | 顧客名 | 住所 | 商品名 | 価格 | 購入日 |
|-------|----------|--------------------|---------|-------|------------|
| 1 | 田中太郎 | 東京都中央区1-1-1 | テレビ | 50000 | 2023-10-01 |
| 2 | 田中太郎 | 東京都中央区1-1-1 | 冷蔵庫 | 100000| 2023-10-02 |
| 3 | 山田花子 | 大阪府北区2-2-2 | 洗濯機 | 30000 | 2023-10-03 |
| 4 | 田中太郎 | 東京都中央区1-1-1 | 掃除機 | 15000 | 2023-10-04 |
22
データの不整合の確認
在庫管理データベースです。商品の価格情報が、商品テーブル注文履歴
テー2つの場所に保存されています。
価格の不一致はどこで起きていますか?
商品テーブル
| 商品ID| 商品名 | 価格 |
|-------|---------|-------|
| 1 | テレビ | 50000 |
| 2 | 冷蔵庫 | 100000|
| 3 | 洗濯機 | 30000 |
注文履歴テーブル
| 注文ID| 商品ID| 商品名 | 価格 | 注文日 |
|-------|-------|---------|-------|------------|
| A | 1 | テレビ | 50000 | 2023-10-01 |
| B | 2 | 冷蔵庫 | 95000 | 2023-10-02 |
| C | 3 | 洗濯機 | 31000 | 2023-10-03 | 23
ヒント
商品テーブルと注文履歴テーブルの同じ商品IDに基づいて、価格の一致を確
認します。
商品テーブル
| 商品ID| 商品名 | 価格 |
|-------|---------|-------|
| 1 | テレビ | 50000 |
| 2 | 冷蔵庫 | 100000|
| 3 | 洗濯機 | 30000 |
注文履歴テーブル
| 注文ID| 商品ID| 商品名 | 価格 | 注文日 |
|-------|-------|---------|-------|------------|
| A | 1 | テレビ | 50000 | 2023-10-01 |
| B | 2 | 冷蔵庫 | 95000 | 2023-10-02 |
| C | 3 | 洗濯機 | 31000 | 2023-10-03 |
24
解答例
注文IDB」の「冷蔵庫」の価格が、商品テーブルと異なっていま
100,000 vs. 95,000)。
注文IDC」の「洗濯機」の価格も、商品テーブルと異なっています
30,000 vs. 31,000)。
商品テーブル
| 商品ID| 商品名 | 価格 |
|-------|---------|-------|
| 1 | テレビ | 50000 |
| 2 | 冷蔵庫 | 100000|
| 3 | 洗濯機 | 30000 |
注文履歴テーブル
| 注文ID| 商品ID| 商品名 | 価格 | 注文日 |
|-------|-------|---------|-------|------------|
| A | 1 | テレビ | 50000 | 2023-10-01 |
| B | 2 | 冷蔵庫 | 95000 | 2023-10-02 |
| C | 3 | 洗濯機 | 31000 | 2023-10-03 |
25
3-3. 異状
26
異状とは
異状とは、データベースの設計が不適切な場合に、
データの操作(追加、更新、削除)に起こる
期しない問振るのことを指す。
不適切に設計されたデータベースでは、デー
冗長性が生じることが多く、これが異状の原因と
なる。
(「異常」ではありません)
27
異状の具体例
これは、動物病院のデータベース。徳川家康さん
2匹のペットの記録がある。
徳川家康さんが引っ越すと、2か所の変更が必要
不便、書き換え漏れによる不整合の危
データベースの設計が不適切
28
ペット名
オーナー
住所
ミミ
徳川家康
東京都中央区
1-1-1
タロウ
徳川家康
東京都中央区
1-1-1
異状の問題点
データの整合のリスクが高まる。
不整が生じると、情報の信頼性が失われ誤っ
た意思決定や業務処理のミスを引き起こす可能
がある。
大きな問題となる。
29
不整合が起きている例
顧客名
お気に入りのドリンク
価格
田中
カフェラテ
400
田中
カプチーノ
450
佐藤
カフェラテ
420
データベース内に異なる価格が混在し、どちらが
正しいのかが不明確になっている
不整合が起きている例
田中さんのクラスが変更になった。書き換え漏れに
おり、所属クラス情報の矛盾が発生
30
生徒名
クラス
教科
成績
田中
3
A
数学
85
田中
3
D
英語
90
佐藤
3
B
数学
88
佐藤
3
B
英語
92
不整合が起きている例
新しい生徒が転入した。成績が無いので、行全体
を完成できない。
31
生徒名
クラス
教科
成績
田中
3
A
数学
85
田中
3
A
英語
90
佐藤
3
B
数学
88
佐藤
3
B
英語
92
鈴木
3
B
不整合が起きている例
佐藤さんの英語と数学の成績がり消しになった。
成績が無いので、行全体を完成できない。
32
生徒名
クラス
教科
成績
田中
3
A
数学
85
田中
3
A
英語
90
佐藤
3
B
佐藤
3
B
異状のまとめ
異状とは
データベース操作(追加、更新、削除)時の予期しない問題
主にデータベースの不適切な設計から生じる
冗長性の存在が、異状の主な原因
異状の具体例
動物病院のデータベースにおいて、徳川家康さんの住所と、
2匹のペットの記録
住所変更時、2つのレコードを別々に更新する必要がある。
予期しない問題。書き換え漏れのリスク
異状の問題点
データの不整合のリスク増加 33
3-4. 正規化
34
リレーショナルデータベースの設計における
考慮事項
次のことを考慮して設計を行
冗長なデータの排除を行正規化
データの整合性を保証する制約
例:関連するテーブル間の参照に関する制約
例:同じ値が2度現れないとい制約
データの検索や操作の効率化索引、データベースの構造
の簡素化
35
正規化とその重要性
正規は、リレーショナルデータベースのテー
ルを適切な形に再構成することで、ータの冗
性を排除し、データの整合性を向上させるプロセ
ス。
正規を適切に実施することでデータの不整合
防ぐことができる。
正規化は、データベース設計において欠かせない
ステップです。
36
正規化の例
37
正規化前 正規化後
名前
昼食
料金
A
そば
250
B
カレーライス
400
C
カレーライス
400
D
うどん
250
名前
昼食
A
そば
B
カレーライス
C
カレーライス
D
うどん
昼食
料金
そば
250
カレーライス
400
うどん
250
正規化により、元のテーブルにあった冗長性を排除
冗長なデータがある
冗長なデータがない
名前
昼食
料金
A
そば
250
B
カレーライス
400
C
カレーライス
400
D
うどん
250
正規化前の問題
38
更新
350
カレーライスが
400円か 350に値下
昼食の値段が1つのはずなのに、
350, 400 の違った値段の記録が
あり、不整合がある
400」をすべて「350」に変更
する必要があるが、変更を間
違ったとする
正規化によるデータの不整合の防止
39
テーブル
データの不整合はない
カレーライスが
400円か 350に値下
朝食
値段
カレーライス
400
どん
250
名前
朝食
A
カレーライス
B
どん
C
カレーライス
350
昼食
値段
カレーライス
400
どん
250
名前
昼食
A
カレーライス
B
どん
C
カレーライス
350
正規化による問題解消
40
更新 カレーライスが
400円か 350に値下
400」をすべて「350」に変更
するのは1か所で済む。
間違いが起きにくい。
正規化による冗長なデータの排除の例
41
生徒名
クラス
教科
成績
田中
3
A
数学
85
田中
3
A
英語
90
佐藤
3
B
数学
88
佐藤
3
B
英語
92
生徒
ID
生徒名
クラス
1
田中
3
A
2
佐藤
3
B
生徒ID
教科
成績
1
数学
85
1
英語
90
2
数学
88
2
英語
92
正規化
正規化により、元のテーブルにあった冗長性を排除
正規化による冗長なデータの排除の例
42
正規化
データの冗長性が排除され、更新における不整合のリスクが低減
正規化のメリットとデメリット
正規化のメリット
データの長性を排
データの合性が向
更新、削除、挿入時の異状を減少
正規化のデメリット
過度に正規化されたデータベースでは、テーブル
の数が多くなり、利用が複雑になる場合がある。
性能上の問題が発生する可能性もある。
43
正規化のまとめ
正規:リレーショナルデータベースのテーブル
再構成
目的:データの冗長性排除、整合性向上
結果:データの不整合防止
位置付け:データベース設計の必須ステップ
44
テーブル分割
45
テーブル
テーブル
分割
テーブル
テーブル分割により、1つのテーブルが2つ以上の
テーブルに分割される。
テーブル分割を行理由
冗長なデータを排除する正規を行
より小さなテーブルに分割することで、問い合
わせ(クエリ)の性能を向上させる
46
テーブル分割を行SQL
47
購入者
ID
aa
1
bb
1
cc
2
dd
3
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
ID 商品名 単価 購入
1
みかん
50
aa
1
みかん
50
bb
2
りんご
100
cc
3
メロン
500
dd
SELECT DISTINCT ID, 商品名, 単価
INTO A FROM 購入記録;
SELECT DISTINCT 購入者, ID
INTO B FROM 購入記録;
2つの SQL の実行により、テーブル分割を行っている
テーブル結合
48
テーブル
テーブル
結合
テーブル
テーブル結合を行理由
関連のある複数のテーブルを組み合わせて1つに
するため
特に、正規化のために分割されたテーブルをもと
に戻すため
49
テーブル結合を行SQL
50
購入者
ID
aa
1
bb
1
cc
2
dd
3
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
SELECT A.ID, 商品名, 単価, 購入者
FROM A, B
WHERE A.ID = B.ID;
ID 商品名 単価 購入
1
みかん
50
aa
1
みかん
50
bb
2
りんご
100
cc
3
メロン
500
dd
テーブルの分割と結合に役立つ SQL コマンド
DISTINCT ・・・ 重複行除去
INTO ・・・ Access だけの機能.SQL の結果をテーブル
に保存
51
テーブルの分割と結合
52
購入者
ID
aa
1
bb
1
cc
2
dd
3
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
ID 商品名 単価 購入
1
みかん
50
aa
1
みかん
50
bb
2
りんご
100
cc
3
メロン
500
dd
SELECT A.ID, 商品名, 単価, 購入者
FROM A, B
WHERE A.ID = B.ID;
ID 商品名 単価 購入
1
みかん
50
aa
1
みかん
50
bb
2
りんご
100
cc
3
メロン
500
dd
SELECT DISTINCT ID, 商品名, 単価
INTO A FROM 購入記録;
SELECT DISTINCT 購入者, ID
INTO B FROM 購入記録;
テーブルの分割と結合によ
り、もとに戻る場合がある
全体まとめ
リレーショナルデータベースの重要
データの整合性:誤ったデータや矛盾したデータの保存を防ぐ。
柔軟な問い合わせ能力SQLを使用し、複雑な検索やデータ抽
出が可能。
トランザクション:一連の操作を一つの単位として扱機能。
セキュリテ:アクセス権限の設定などで確保。
冗長なデータの問題
更新の際、全ての個所を更新する必要性。
異状とは
データベース操作時の予期しない問題。
主にデータベースの不適切な設計により、冗長なデータが発生
してしまことが主な原
53
全体まとめ
正規化とその重要性
正規化は、テーブルを適切な形に再構成するプロセス。
冗長性の排除とデータ整合性の向上が目的。
データベース設計の必須ステップ。
テーブル分割の理由
正規化のための冗長なデータの排除。
問い合わせの性能向上。
テーブル結合の理由
関連する複数テーブルの組み合わせ。
正規化で分割されたテーブルの再結合。
54
データの整合性の保
テーブルを正規化することで、データの冗長性を排除し、
整合性を高めることが可能となります。
この学習を通じて、データ管理における新しい視角や考
え方を獲得できます。
データベース設計スキル
データベース設計の基本を学ぶことは、
多様なデータベー
スシステムの設計や運用能力
に直結します。
このとき、データの冗長性、異状、正規化について理解し
ておくことは有用です。
問題決能力
データの整合性やデータベース設計スキルを深化させること
で、現実の問題解決能力が向上します。
学びの過程は、新しい発見や視野の広がり、さらにはそれ
らがもたらす実益と直結しています。 55
自習 冗長なデータの再現
課題
自分で考えたデータをもとに、わざと、冗長なデータを持
つ新しいテーブルを作成してください。
ヒント
例として、学生の一覧と、彼らが所属するクラブの一覧の
2つのテーブルを考えてください。
そして、それらの2つのテーブルを1つにまとめて、各学
生が所属するクラブを示す新しいテーブルを作成します。
このテーブルは、冗長なデータを持つことが考えられます
(提出する必要はありません。)
56
自習 ER図の作図サイト
ERDPlus は、ER図などを作成するためのオンライ
ンツールで
https://erdplus.com/standalone
57
ITパスポート試験対策などで、すでに自分でER図のこと
を学んだ経験がある人に向いた自習です。
ER図については、授業の別の回で説明するので待って
いてください。
(提出する必要はありません。)