ic-1. リレーショナルデータベー
スの基本まとめ
(データベース)
URL: https://www.kkaneko.jp/de/index.html
1
金子邦彦
謝辞:この資料では「かわいいフリー素材集 いらすとや」のイラストを使用しています
アウトライン
1. リレーショナルデータベースシステムの概要
2. SQL
3. SQL の実行
4. データベースの設計
2
1. リレーショナル
データベースシステム
3
データベースシステム
データベースシステムは,データベースを扱う IT
のシステム
4
データベース
管理システム
利用者
データベースシステム
= データベース(データの集まり)
+ データベース管理システム(ソフトウエア)
データベース
コンピュータ
記憶
装置
利用者
利用者
データベースシステム
ネットワーク
データベースシステム
5
データベー
スシステム
ネットワー
ク
取引
記入
データ保
存
センサー連携
人工知能応用
・データベース管理システムは,データベースの管理等の機
能を持ったソフトウエア
・オンラインでデータを共有するときに,特に適する
リレーショナルデータベースシステム
6
リレーショナル
データベース
管理システム
リレーショナル
データベース
コンピュータ
記憶
装置
あわせて
リレーショナルデータベースシステム
たくさんのテーブルが格納される
• データベースシステムの一種
• データの形はテーブル(リレーションともいう)
属性 id,
name, price
属性 book, who,
what, at
リレーショナルデータベースシステムは
表計算ではない
7
データベース
+
データベース
管理システム
| |
データベース
システム
エクセルのデータ
+
エクセル
(ソフトウエア)
| |
表計算のシステム
表計算
データ共有,検索,セキュリティ
リレーショナルデータベースシステムの特徴
データの形はテーブル
• 機能が豊富
• 扱いは容易.SQL を利用.
• リレーショナルデータベース設計の基礎は体系化
されている:異状,正規化
• 普及度はナンバーワン
• リレーショナルデータベース管理システムにはさ
まざまある.MySQL, マイクロソフト Access,
Oracle, SQL Server, PostgreSQL, SQLite3,
Firebird など.(無料で使えるものもある)
8
テーブル定義
9
テーブル
「book」と「who」と
「what」と「at」の属性
book who what at
赤
XX
貸出
2023-05-
11 13:30:18
赤
XX
返却
2023-05-
11 13:30:18
青
YY
貸出
2023-05-
11 13:30:18
緑
ZZ
貸出
2023-05-
11 13:30:18
テーブル名: tosyo
リレーショナルデータベースの構築手順
10
テーブル定義
※ 最初,テーブルは空
データベース
生成
※ 最初,デー
タベースは空
テーブル生成
データベース
設計
id
購入
者
商品
ID
数量
id
購入
者
商品
ID
数量
1
X
1
2
Y
2
id
name price
テーブル定義
11
テーブル定義では,
・テーブル名
・属性の属性名
・属性のデータ型
などを設定して,テーブルを定義する
CREATE TABLE tosyo (
book TEXT,
who TEXT,
what TEXT,
at DATETIME);
テーブル名: tosyo
book who what at
赤
XX
貸出
2023
-05-
11 13:30:18
赤
XX
返却
2023
-05-
11 13:30:18
青
YY
貸出
2023
-05-
11 13:30:18
緑
ZZ
貸出
2023
-05-
11 13:30:18
book who what at
赤
XX
貸出
2023-05-
11 13:30:18
赤
XX
返却
2023-05-
11 13:30:18
青
YY
貸出
2023-05-
11 13:30:18
緑
ZZ
貸出
2023-05-
11 13:30:18
属性のデータ型
12
テーブル
の本体
属性名
それぞれの属性のデータ型
TEXT
DATETIME
TEXT
TEXT
2. SQL
13
問い合わせ(クエリ)の仕組み
14
データの種類ごとに分かれ
た,たくさんのテーブル
問い合わせ
(クエリ)
のコマンド
問い合わせ(クエリ)
の結果は,テーブル形式の
データ
リレーショナル
データベースシステム
問い合わせ(クエリ)
• 「問い合わせ(クエリ)」とは、
データベースの検索、集計・集約、ソート(並べ替
え)を行うこと
• リレーショナルデータベースでの問い合わせ(ク
エリ)の結果は、テーブル形式のデータ
15
• SQL は、リレーショナルデータベースシステムの
さまざまな機能を使える言語
問い合わせ(クエリ)、
テーブル定義、
その他の操作
16
SQL
SQL の特徴
• SQL は,リレーショナルデータベースシステムの
標準言語
• 豊富な機能
• さまざまな機能を組み合わせて使うことができる
• 簡単簡潔
• コマンドなので,自動実行も簡単.あとからの確
認も簡単
17
SQL による問い合わせ(クエリ)の例
SQLは簡潔で単純
18
誰が何回貸出,返却したか
SELECT who, COUNT(*) FROM tosyo GROUP BY who;
貸出の回数は全部で何回か
SELECT COUNT(*) FROM tosyo WHERE what='貸出';
SQL を用いた新しい行の挿入
19
テーブル名
値の並び.半角のカンマ「,」で区切る
※ 文字列は半角の「'」で囲む
INSERT INTO products VALUES(4, 'apple', 150);
id name price
1
orange
50
2
apple
100
3
melon
500
id name price
1
orange
50
2
apple
100
3
melon
500
4
apple
150
テーブル名: products
SQL の利用イメージ
リレーショナル
データベースシステム
SQLプログラム1
SQLプログラム2
SQLプログラム3
・SQL プログラムを準備しておき,
呼び出すことが可能.
・他のアプリの中に SQL プログラム
を埋め込むことが可能
SQLの作成,
編集,実行
一般利用者は,リレーショナル
データベースの利用で,
SQLのことを意識しないことも多い
20
3. SQL の実行
21
アウトライン
• SQL によるテーブル定義
• SQL による行の挿入
• SQL による問い合わせ(クエリ)
22
作成するテーブル
• 図書 (book) は,次の3冊とする
赤,青,緑
• 貸出者(who),貸出か返却か(what),日時(at)を記
録する
23
book who what at
赤
XX
貸出
2023-05-
11 13:30:18
赤
XX
返却
2023-05-
11 13:30:18
青
YY
貸出
2023-05-
11 13:30:18
緑
ZZ
貸出
2023-05-
11 13:30:18
at には,プログラム
実行日時を記録する
テーブル名: tosyo
テーブル定義のSQL
CREATE TABLE tosyo (
book TEXT,
who TEXT,
what TEXT,
at DATETIME);
24
赤,青,本
貸出者
貸出,返却
日時
SQL
のキーワード
TEXT
文字列
DATETIME
日時,日付,時刻など
Paiza.IO の使い方
① ウェブブラウザを起動する
② 次の URL を開く
https://paiza.io/
③ もし,表示が英語になっていたら,日本語に切り
替える
④ 「コード作成を試してみる」をクリック
⑤ 「MySQL」を選ぶ(左上のボタンをクリックするとメニューが出る)
27
プログラムの
編集画面
実行ボタン
プログラムを
書き換えること
ができる
編集画面を確認する。
すでに、SQL が入っているが、使わないので消す。
テーブル定義
29
CREATE TABLE tosyo (
book TEXT,
who TEXT,
what TEXT,
at DATETIME);
行の挿入と確認
30
INSERT INTO tosyo VALUES('赤', 'XX', '貸出', NOW());
INSERT INTO tosyo VALUES('赤', 'XX', '返却', NOW());
INSERT INTO tosyo VALUES('青', 'YY', '貸出', NOW());
INSERT INTO tosyo VALUES('緑', 'ZZ', '貸出', NOW());
SELECT * FROM tosyo;
NOW() は MySQL の機能で
現在日時の取得
(9時間遅れの世界標準時)
集計・集約
31
SELECT who, COUNT(*) FROM tosyo GROUP BY who;
SELECT COUNT(*) FROM tosyo WHERE what='貸出';
誰が何回貸出,返却したか
SELECT who, COUNT(*) FROM tosyo GROUP BY who;
貸出の回数は全部で何回か
SELECT COUNT(*) FROM tosyo WHERE what='貸出';
ここで使用した SQL
• テーブル定義
CREATE TABLE ...
• 問い合わせ
SELECT ... FROM ...
SELECT ... FROM ... WHERE ...
• 行の挿入
INSERT INTO ...
32
4. リレーショナルデータベース
の設計
33
はじめに
• データベースで一番困ることは,データベースの
異状である.
【異状とは】
データベース内のデータが、
◆ つじつまの合わない状態
あるいは
◆ 記録したいデータが記録できない状態
になり、しかも、修復できない状態に陥ること
• 異状は完全に防止できるわけではないが,正規化
により,ある程度防ぐことができる
34
異状の例
35
このバスは無料です このバスは運賃1000円です
異状が起きやすいリレーショナルデータベースの例
36
名前
朝食
値段
A
カレー
ライス
400
B
うどん
250
C
カレー
ライス
400
• カレーライスは、400円
• うどんは、250円
• Aさんはカレーライスを食べた
• Bさんはうどんを食べた
• Cさんはカレーライスを食べた
情報
テーブル
異状が起きやすいリレーショナルデータベースの例
37
名前
朝食
値段
A
カレー
ライス
400
B
うどん
250
C
カレー
ライス
400
• カレーライスは、400円
• うどんは、250円
• Aさんはカレーライスを食べた
• Bさんはうどんを食べた
• Cさんはカレーライスを食べた
情報
テーブル
情報の更新
350
350
350
カレーライスが
400円から 350円に値下げ
異状が起きやすいリレーショナルデータベースの例
38
名前
朝食
値段
A
カレー
ライス
400
B
うどん
250
C
カレー
ライス
400
テーブル
情報の更新
350
カレーライスが
400円から 350円に値下げ
書き換え忘れして
しまうかも!
異状が起きやすいリレーショナルデータベースの例
39
名前
朝食
値段
A
カレー
ライス
400
B
うどん
250
C
カレー
ライス
350
テーブル
情報の更新
カレーライスが
400円から 350円に値下げ
異状が起きている
◆朝食の値段が1つのはずなの
に、違った値段が記録
されていてつじつまが合わない
テーブル分解
40
分解
名前
朝食
値段
A
カレー
ライス
400
B
うどん
250
C
カレー
ライス
400
朝食
値段
カレーライス
400
うどん
250
名前
朝食
A
カレーライス
B
うどん
C
カレーライス
分解後、情報は失わ
れていない
分解後のテーブルは,異状が起きにくい
41
テーブル
異状はない
カレーライスが
400円から 350円に値下げ
朝食
値段
カレーライス
400
うどん
250
名前
朝食
A
カレーライス
B
うどん
C
カレーライス
350
設計変更による異状の防止
42
朝食
値段
カレーライス
400
うどん
250
異状が起きにくいデータベース
350
名前
朝食
A
カレーライス
B
うどん
C
カレーライス
異状が起きやすいデータベース
名前
朝食
値段
A
カレー
ライス
400
B
うどん
250
C
カレー
ライス
400
350
350
カレーライスの値下げのとき、
片方を書き忘れると → 異状
情報は
同じ
冗長なデータがある
冗長なデータがない
43
1つのテーブルを、複数のテーブルに分解す
ることで、異状の防止ができる場合がある.