---
title: 14. 従属，正規形，正規化
tags:  #リレーショナルデータベース #従属 #正規形 #正規化 #第三正規形 #主キー  
author: [kunihikokaneko](https://www.docswell.com/user/6674398749)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/5EGGMX5XEL.jpg?width=480
description: リレーショナルデータベースの基本（スライド資料とプログラム例） https://www.kkaneko.jp/de/ds/index.html       ds-1. データベースとは，データベースシステムとは，情報とデータ     ds-2. SQL，SQL のデータ型，テーブル定義，問い合わせ（クエリ）     ds-3. ER 図，関連，異状, テーブル分解     ds-4. 問い合わせ（クエリ）     ds-5. 集計・集約     ds-6. 並べ替え（ソート）     ds-7. 結合     ds-8. データベースの異状，分解と結合     ds-9. 主キー，参照整合性制約，従属     ds-10. 中間まとめ，データベースの応用，データベースの種類     ds-11. SQL のIN，副問い合わせ     ds-12. データベースの NULL，AND，OR     ds-13. データベース操作，トランザクション，リカバリ，ロック，同時実行制御     ds-14. 従属，正規形，正規化     ds-15. さまざまなデータベース  YouTube 再生リスト「リレーショナルデータベースの基本」 https://youtube.com/playlist?list=PLwoDcGBEg9WGKPP6dExr8DcUf9nV2kYGD  金子邦彦研究室ホームページ: https://www.kkaneko.jp/index.html
published: January 12, 22
canonical: https://www.docswell.com/s/6674398749/5JXJJK-2022-01-12-111718
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/5EGGMX5XEL.jpg)

14. 従属，正規形，正規化
URL: https://www.kkaneko.jp/de/ds/index.html
金子邦彦
謝辞：この資料では「いらすとや」のイラストを使用しています
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4JQXR8Z5EP.jpg)

• 従属
⇒
データベースのデータが冗長か
を分析する手がかり
• 従属の分析は、データベースの設計で大切
商品名
みかん
みかん
りんご
メロン
単価
50
50
100
500
購入者
aa
bb
cc
aa
「単価」は「商品名」に従属する
「商品名 → 単価」のように書く
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/K746823VE1.jpg)

正規形は，リレーショナルデータベースで，次を防
ぐための考え方．
• データの重複（冗長）
• データベース操作における異状
正規化は，テーブルの分解などにより、正規形のレ
ベルを上げること
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LJ1V2M14EG.jpg)

アウトライン
番号
項目
14-1
14-2
14-3
14-4
14-5
14-6
14-7
従属
従属に関する演習
正規形
種々の正規形
第三正規形
正規化
MySQL を用いた分解と正規化の演習
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/GJWLR38ZE2.jpg)

14-1. 従属
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4EZMRV8LJ3.jpg)

従属
商品名
みかん
みかん
りんご
メロン
単価
50
50
100
500
購入者
aa
bb
cc
aa
「単価」は「商品名」に従属する
「商品名 → 単価」のように書く
「ある属性 X の値が１つに決まると，別の属性 Y
の値が１つに決まる（属性 Y の値が複数になること
はあり得ない）」とき、
属性 Y は 属性 X に従属（X → Y のように書く）
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/Y76NR5PM7V.jpg)

従属の例 名前
A
昼食
そば
料金
250
B
C
D
カレーライス 400
カレーライス 400
うどん
250
①「昼食」は「名前」に従属する
「名前 → 昼食」のように書く
制約：それぞれの人は，昼食を１つしか食べない
②「料金」は「昼食」に従属する
「昼食 → 料金」のように書く
制約：それぞれの昼食の料金は１つ
③「料金」は「名前」に従属する
「名前 → 料金」のように書く
制約：それぞれの人の料金は１つ
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/G7558YKQ74.jpg)

A
そば
B
カレーライス
名前
昼食
C
カレーライス
D
うどん
それぞれの人は，昼食を１つしか食べない
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/9J2NKGWWER.jpg)

250
そば
昼食
400
料金
カレーライス
250
うどん
それぞれの昼食の料金は１つ
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/DEYPNVL9EM.jpg)

A
250
B
400
名前
料金
C
400
D
250
それぞれの人の料金は１つ
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/VJN5XM4D78.jpg)

14-2. Access を用いた従属に関
する演習
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/YE9Y8NQ8J3.jpg)

「商品」テーブルの従属
商品名
みかん
みかん
りんご
メロン
単価
50
50
100
500
購入者
aa
bb
cc
aa
商品名 → 単価
（「単価」は「商品名」に従属する）
商品名
単価
みかん
50
りんご
100
メロン
500
商品名、単価のみ
を射影したテーブル
（重複行除去）
商品名でグループを作ると、
行数（レコード数）はすべて１
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/GE868KGZ7D.jpg)

「商品」テーブルの従属
商品名
みかん
みかん
りんご
メロン
単価
50
50
100
500
購入者
aa
bb
cc
aa
単価と購入者は、従属にない
単価
購入者
50
aa
50
bb
100
cc
500
aa
単価、購入者のみ
を射影したテーブル
（重複行除去）
単価や購入者でグループを作っても、
「行数（レコード数）はすべて１」
とはならない
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/LEL9RZG1JR.jpg)

演習用のデータベースファイル
• 演習用の Access データベースファイル
※ セレッソの利用者は，セレッソからダウンロー
ド可能
• 「コンテンツの有効化」のメッセージが出たとき
は、確認のうえ、次にすすむ
• つぎのような表示が出たときは、確認のうえ、
「はい」
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4JMZRVQ5EW.jpg)

演習用のデータベースファイル
商品テーブル
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/PJR6R28Z79.jpg)

SELECT DISTINCT 商品名, 単価
FROM 商品;
射影と重複行除去
商品名
みかん
みかん
りんご
メロン
単価
50
50
100
500
購入者
aa
bb
cc
aa
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/PEXMRD817X.jpg)

SELECT 商品名, count(*)
FROM (SELECT DISTINCT 商品名, 単価 FROM 商品)
GROUP BY 商品名;
グループ化して、行数をカウント
商品名
みかん
みかん
りんご
メロン
単価
50
50
100
500
購入者
aa
bb
cc
aa
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/3EKGRXKMJD.jpg)

SELECT DISTINCT 単価, 購入者
FROM 商品;
射影と重複行除去
商品名
みかん
みかん
りんご
メロン
単価
50
50
100
500
購入者
aa
bb
cc
aa
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/L73N85Z275.jpg)

SELECT 単価, count(*)
FROM (SELECT DISTINCT 単価, 購入者 FROM 商品)
GROUP BY 単価;
グループ化して、行数をカウント
商品名
みかん
みかん
りんご
メロン
単価
50
50
100
500
購入者
aa
bb
cc
aa
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/87DWMDR6JG.jpg)

SELECT 購入者, count(*)
FROM (SELECT DISTINCT 単価, 購入者 FROM 商品)
GROUP BY 購入者;
グループ化して、行数をカウント
商品名
みかん
みかん
りんご
メロン
単価
50
50
100
500
購入者
aa
bb
cc
aa
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/VJP9RXMZE8.jpg)

14-1. 正規形
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/2EVMRL9MEQ.jpg)

正規形とは
正規形は，リレーショナルデータベースで，次を防
ぐための考え方．
• データの重複（冗長）
• データベース操作における異状
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/57GGMXZX7L.jpg)

正規形の必要性
• 次のテーブルは、冗長である
「情報工」と「工」のペアが複数個所に
学生番号
氏名
学科
学部
001
XX
情報工
工
002
YY
情報工
工
003
ZZ
情報工
工
・次のテーブルは、料金を更新したときに異状が発生
名前
A
昼食
料金
カレーライス
400
B
C
うどん
カレーライス
250
350
◆昼食の料金が１つのはず
なのに、違った料金が記録
されていてつじつまが合わ
ない
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/4EQXR8L57P.jpg)

正規形とテーブルの分解
• １つのテーブルを、複数のテーブルに分解すると
• そのテーブルの、正規形のレベルが変化する場合
がある．
• なぜ、テーブルを分解すると異状が起きにくくな
る場合があるのか？ 正規形のレベルという考え
方で、理解ができる
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/KJ4682DV71.jpg)

正規形のレベルの変化
名前
A
B
C
昼食
カレー
ライス
うどん
カレー
ライス
名前
昼食
A
カレーライス
B
うどん
C
カレーライス
第三正規形である
料金
400
250
400
第三正規形ではない
分解
昼食
カレーライス
うどん
料金
400
250
第三正規形である
※「第三正規形」につい
ては、別資料で説明
分解後、情報は失わ
れていない
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/LE1V2MZ47G.jpg)

14-2. 種々の正規形
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/GEWLR39Z72.jpg)

正規形には、種々の段階（レベル）がある
• 第一正規形
テーブルのセルには，１つの値を入れる．セルの合併はしない．
• 第二正規形
候補キーに含まれない属性は、すべて候補キーに従属する．そし
て，候補キーの部分集合には従属しない．
• 第三正規形
主キー以外の属性は，すべて主キーにのみ直接，従属する
• ボイスコッド正規形（3.5 正規形ともいう）
すべての従属関係 X→Y について、それは自明であるか、Xが超
キーである．
• 第四正規形
すべての多値従属関係 X Y について、それは自明であるか、Xが
候補キーであるか、Xがその超集合である．
• 第五正規形
すべての結合従属性について、それは自明であるか、候補キーに
より含意される
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/47ZMRV9LE3.jpg)

第一正規形でないもの
次のテーブルは第一正規形か？
時
8
12
17
分
0, 20, 45
30
20, 40
第一正規形でない
次のテーブルは第一正規形か？
時
分
8
12
17
0
20
45
30
20
40
第一正規形でない
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/YJ6NR5KMJV.jpg)

第三正規形でないもの
次のテーブルは第三正規形か？
名前
A
昼食
カレー
ライス
うどん
カレー
ライス
B
C
料金
400
主キー
第三正規形でない
250
400
従属
①名前 → 昼食
②昼食 → 料金
③名前 → 料金
第三正規形の条件
主キー以外の属性は，
すべて主キーにのみ
直接，従属する
従属の②昼食 → 料金
がこの条件に違反
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/GJ558YPQJ4.jpg)

正規形には、種々の段階（レベル）がある
•
•
•
•
•
•
第一正規形
第二正規形
第三正規形
ボイスコッド正規形（3.5 正規形ともいう）
第四正規形
第五正規形
下のものほど、
・より厳しい条件
・データの重複、異状の解消の度合いが高い（メリット）
・性能低下、テーブル数の増加、制約の記述不可
能になるなど、デメリットもある
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/LE3N853ZE5.jpg)

14-3. 第三正規形
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/8EDWMD447G.jpg)

第三正規形
☑ 主キー以外の属性は，すべて主キーにのみ直
接，従属するとき，第三正規形という
※ 主キー以外に従属している属性があるときは
第三正規形でない
主キー
ID
氏名
1 徳川家康
2 豊臣秀吉
3 徳川家康
住所
XX
YY
ZZ
第三正規形である
従属
①ID → 氏名
②ID → 住所
第三正規形の条件
主キー以外の属性は，
すべて主キーにのみ
直接，従属する
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/V7P9RXMVJ8.jpg)

分析手順
次の２つのテーブルについて、第三正規形であるか
を分析
会員番号 住所
100
101
福山市野上町
4-3-2
福山市曙町12-3-4
会員番号 注文した商
品
100
りんご
101
りんご
100
ばなな
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/2JVMRL9RJQ.jpg)

① 主キーを見る
主キー
主キー
会員番号 住所
100
101
福山市野上町
4-3-2
福山市曙町12-3-4
会員番号 注文した商
品
100
りんご
101
りんご
100
ばなな
２属性（会員番号, 注文した
商品）のペアは主キーである
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/5EGGMXZ6EL.jpg)

② 従属を見る
主キー
主キー
会員番号 住所
100
101
福山市野上町
4-3-2
福山市曙町12-3-4
従属
① 会員番号 → 住所
会員番号 注文した商
品
100
りんご
101
りんご
100
ばなな
従属
なし
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/4JQXR8L2EP.jpg)

③ 第三正規形の条件にあてはめる
第三正規形の条件
主キー
主キー
会員番号 住所
100
101
主キー以外の属性は，
すべて主キーにのみ
直接，従属する
福山市野上町
4-3-2
福山市曙町12-3-4
従属
① 会員番号 → 住所
第三正規形である
会員番号 注文した商
品
100
りんご
101
りんご
100
ばなな
従属
なし
条件に反する
従属がない
第三正規形である
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/K74682DPE1.jpg)

従属
商品名
みかん
みかん
りんご
メロン
単価
50
50
100
500
購入者
aa
bb
cc
aa
「単価」は「商品名」に従属する
「商品名 → 単価」のように書く
「ある属性 X の値が１つに決まると，別の属性 Y
の値が１つに決まる（属性 Y の値が複数になること
はあり得ない）」とき、
属性 Y は 属性 X に従属（X → Y のように書く）
37


# Page. 38

![Page Image](https://bcdn.docswell.com/page/LJ1V2MZXEG.jpg)

分析その２
次のテーブルについて、第三正規形であるかを分析
会員番号 住所
100
101
100
福山市野上町4-3-2
福山市曙町1-2-3-4
福山市野上町4-3-2
注文した商品
りんご
りんご
ばなな
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/GJWLR39KE2.jpg)

① 主キーを見る
主キー
主キー
会員番号 住所
注文した商品
100
101
100
福山市野上町4-3-2
福山市曙町1-2-3-4
福山市野上町4-3-2
りんご
りんご
ばなな
・会員番号だけでは、主キーにならない
・２属性（会員番号, 注文した商品）のペアは主キーで
ある
※「主キーが２つある」という意味ではない
39


# Page. 40

![Page Image](https://bcdn.docswell.com/page/4EZMRV9NJ3.jpg)

② 従属を見る
主キー
主キー
会員番号 住所
注文した商品
100
101
100
福山市野上町4-3-2
福山市曙町1-2-3-4
福山市野上町4-3-2
りんご
りんご
ばなな
従属
① 会員番号 → 住所
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/Y76NR5K97V.jpg)

③ 第三正規形の条件にあてはめる
第三正規形の条件
主キー以外の属性は，
すべて主キーにのみ
直接，従属する
主キー
主キー
会員番号 住所
注文した商品
100
101
100
福山市野上町4-3-2
福山市曙町1-2-3-4
福山市野上町4-3-2
従属
① 会員番号 → 住所
第三正規形でない
りんご
りんご
ばなな
条件に反する
41


# Page. 42

![Page Image](https://bcdn.docswell.com/page/G7558YPD74.jpg)

正規形のレベルの変化
第三正規形である
分解
第三正規形ではない
第三正規形である
分解後、情報は失わ
れていない
42


# Page. 43

![Page Image](https://bcdn.docswell.com/page/9J2NKGZMER.jpg)

次のテーブルは第三正規形か？
主キー
ID
First_Name
Last_Name
Department
Room
001234
Ignacio
Fleta
Accounting
A
002000
Christian
Martin
Computer Support
B
002122
Orville
Gibson
Human Resources
C
003000
Jose
Ramirez
Research &amp; Devel
B
003400
Ben
Smith
Accounting
A
003780
Allison
Chong
Computer Support
B
従属
従属
従属
従属
答え) 第三正規形ではない
従属 Department → Room は、
主キー以外のものに従属している．
第三正規形の条件に合致しない．
43


# Page. 44

![Page Image](https://bcdn.docswell.com/page/DEYPNVRPEM.jpg)

14-4. 正規化
44


# Page. 45

![Page Image](https://bcdn.docswell.com/page/VJN5XMDM78.jpg)

正規化
• テーブルの分解などにより、正規形のレベルを上
げること
• このとき、情報が失われたり、余分な情報が入る
ようなことがあってはならない
45


# Page. 46

![Page Image](https://bcdn.docswell.com/page/YE9Y8NGWJ3.jpg)

いまから考えるテーブル
カレーライスは
４００円
うどんは
２５０円
そばは
２５０円
名前
A
B
C
D
昼食
そば
カレーライス
カレーライス
うどん
料金
250
400
400
250
Aさんは、そばを食べた
Bさんと、Cさんは、カレーライスを食べた
Dさんは、うどんを食べた
46


# Page. 47

![Page Image](https://bcdn.docswell.com/page/GE868KVR7D.jpg)

分解のバリエーション
• どう分解するか？
名前
A
B
C
D
昼食
そば
カレーライス
カレーライス
うどん
名前
A
B
C
D
いろいろ考えることはできる
料金
250
400
400
250
昼食
そば
カレーライス
カレーライス
うどん
昼食
そば
カレーライス
うどん
料金
250
400
250
分解①
名前
A
B
C
D
昼食
そば
カレーライス
カレーライス
うどん
名前
A
B
C
D
料金
250
400
400
250
分解②
昼食
そば
カレーライス
うどん
名前
A
B
C
D
料金
250
400
250
料金
250
400
400
250
分解③
47


# Page. 48

![Page Image](https://bcdn.docswell.com/page/LEL9RZ52JR.jpg)

分解①
名前
A
B
C
D
昼食
そば
カレーライス
カレーライス
うどん
名前
A
B
C
D
料金
250
400
400
250
分解①
昼食
そば
カレーライス
カレーライス
うどん
昼食
そば
カレーライス
うどん
料金
250
400
250
分解① では、元のテーブルにあった冗長の問題が解消．
異状の防止に効果あり．
48


# Page. 49

![Page Image](https://bcdn.docswell.com/page/4JMZRV39EW.jpg)

分解②
名前
A
B
C
D
昼食
そば
カレーライス
カレーライス
うどん
料金
250
400
400
250
分解②
名前
A
B
C
D
昼食
そば
カレーライス
カレーライス
うどん
名前
A
B
C
D
料金
250
400
400
250
更新のとき、複数個所
書き換え必要な場合
あり
名前
A
B
C
D
料金
250
400
400
250
350
350
分解② では、元のテーブルにあった冗長の問題が解消
されていない
49


# Page. 50

![Page Image](https://bcdn.docswell.com/page/PJR6R2Q979.jpg)

分解③
名前
A
B
C
D
昼食
そば
カレーライス
カレーライス
うどん
昼食
そば
カレーライス
うどん
料金
250
400
400
250
分解③
名前
A
B
C
D
料金
250
400
250
料金
250
400
400
250
分解③ は、結合して元のテーブルに戻すことができない
ので考慮外
50


# Page. 51

![Page Image](https://bcdn.docswell.com/page/PEXMRD537X.jpg)

まとめ
• テーブルの分解により、元のテーブルに戻せなく
なる場合がある．そのような分解を、正規化のた
めに行うことは論外である。
51


# Page. 52

![Page Image](https://bcdn.docswell.com/page/3EKGRX6NJD.jpg)

まとめの２
• テーブルを分解して、第三正規形になったからと
いって、データの冗長の問題が解決できていない
場合がある
52


# Page. 53

![Page Image](https://bcdn.docswell.com/page/L73N856Z75.jpg)

14-5. MySQL を用いた分解と正規化
の演習
53


# Page. 54

![Page Image](https://bcdn.docswell.com/page/87DWMDV4JG.jpg)

Paiza.IO を用いた演習
① URL は https://paiza.io/ja
② 「コード作成を試してみる」をクリック
③ 「MySQL」を選ぶ
次ページへ続く
54


# Page. 55

![Page Image](https://bcdn.docswell.com/page/VJP9RXVVE8.jpg)

正規化
テーブル A, B
テーブル T
名前
A
B
C
D
昼食
そば
カレーライス
カレーライス
うどん
名前
A
B
C
D
料金
250
400
400
250
分解
昼食
そば
カレーライス
カレーライス
うどん
昼食
そば
カレーライス
うどん
料金
250
400
250
55


# Page. 56

![Page Image](https://bcdn.docswell.com/page/2EVMRLZREQ.jpg)

• 次の SQL を入れ，実行結果を確認
56


# Page. 57

![Page Image](https://bcdn.docswell.com/page/57GGMX467L.jpg)

テーブルA, B の結合で、元のテーブルに戻る
57


# Page. 58

![Page Image](https://bcdn.docswell.com/page/4EQXR8G27P.jpg)

正規化にならない分解
テーブル A, B
テーブル T
名前
A
B
C
D
昼食
そば
カレーライス
カレーライス
うどん
昼食
そば
カレーライス
うどん
料金
250
400
400
250
分解
名前
A
B
C
D
料金
250
400
250
料金
250
400
400
250
58


# Page. 59

![Page Image](https://bcdn.docswell.com/page/KJ46825P71.jpg)

• 次の SQL を入れ，実行結果を確認
59


# Page. 60

![Page Image](https://bcdn.docswell.com/page/LE1V2MWX7G.jpg)

テーブルA, B の結合で、元のテーブルに戻らない 60


# Page. 61

![Page Image](https://bcdn.docswell.com/page/GEWLR36K72.jpg)

14-5
create table T(名前 text, 昼食 text, 料金 integer);
insert into T values(&#039;A&#039;, &#039;そば&#039;, 250);
insert into T values(&#039;B&#039;, &#039;カレーライス&#039;, 400);
insert into T values(&#039;C&#039;, &#039;カレーライス&#039;, 400);
insert into T values(&#039;D&#039;, &#039;うどん&#039;, 250);
create table A as select distinct 名前, 昼食 from T;
create table B as select distinct 昼食, 料金 from T;
select * from A;
select * from B;
select A.名前, A.昼食, B.料金 from A, B where A.昼食 =
B.昼食;
61


# Page. 62

![Page Image](https://bcdn.docswell.com/page/47ZMRVYNE3.jpg)

14-5
create table T(名前 text, 昼食 text, 料金 integer);
insert into T values(&#039;A&#039;, &#039;そば&#039;, 250);
insert into T values(&#039;B&#039;, &#039;カレーライス&#039;, 400);
insert into T values(&#039;C&#039;, &#039;カレーライス&#039;, 400);
insert into T values(&#039;D&#039;, &#039;うどん&#039;, 250);
create table A as select distinct 昼食, 料金 from T;
create table B as select distinct 名前, 料金 from T;
select * from A;
select * from B;
select A.昼食, A.料金, B.料金 from A, B where A.料金 =
B.料金;
62


# Page. 63

![Page Image](https://bcdn.docswell.com/page/YJ6NR5D9JV.jpg)

関連資料
• リレーショナルデータベース序論（全４回）
全体を知る．
https://www.kkaneko.jp/cc/di/index.html
• リレーショナルデータベースの基本（全１５回）
基礎を学ぶ．
https://www.kkaneko.jp/cc/ds/index.html
• リレーショナルデータベース演習（全１５回）
演習により修得する．
https://www.kkaneko.jp/cc/de/index.html
63


