10. データベース設計
ベストプラクティス
主キーと外部キー、設計手法
1
金子邦彦
(データベース演習)
URL: https://www.kkaneko.jp/de/de/index.html
SQLスキルの向上
データベース運用スキル
問題解決能力と論理的思考力
2
10-1. イントロダクション
3
リレーショナルデータベースの仕組み
データをテーブルと呼ばれる表形式で保存
テーブル間関連で結ばれる。複雑な構造を持ったデータ
を効率的に管理することを可能に。
4
関連
商品
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入者
商品番号
X
1
X
3
Y
2
購入
商品テーブルと購入テーブ
5
関連
商品
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
購入者
商品番号
X
1
X
3
Y
2
購入
Xさんは、1みかんと,
3 メロンを買った
Yさんは、 2 りんごを買った
商品テーブルの情報
購入テーブルの情報
主キー
主キは、テーブルの各行を識別するためのキー
6
主キー
ID 商品名 単価
みかん
50
りんご
100
メロン
500
主キーの役割
商品テーブルで、すべての商品は一意の ID を持つ
同じ ID をもつ商品は2つ以上ない
商品の行を正確に特定するとに便利
例: ID = 2 である行 1つに定まる
7
主キー
ID 商品名 単価
みかん
50
りんご
100
メロン
500
みかん
30
りんご
50
PRIMARY KEY
PRIMARY KEY はテーブル定義時に使用し、「
キー制約」を示す
8
ID 商品名 単価
みかん
50
りんご
100
メロン
500
CREATE TABLE テーブル名 (
列名1 データ型 PRIMARY KEY,
列名2 データ型,
...
);
CREATE TABLE 商品 (
ID INTEGER PRIMAY KEY,
商品名 TEXT,
単価 INTEGER);
SQL の書き方
主キー
学生ID
科目ID
得点
1
1001
90
1
1002
100
2
1001
85
2
1002
90
2
1003
95
PRIMARY KEY
但し、主キーは1つの属性でも良いし、複数の属性の組み合
わせでもよい(書き方は下のよになる)
9
CREATE TABLE テーブル名 (
列名1 データ型,
列名2 データ型,
...
PRIMARY KEY (列名1, 列名2)
);
SQL の書き方
CREATE TABLE 成績 (
学生ID INTEGER,
科目ID INTEGHER,
得点 INTEGER,
PRIMARY KEY(学生ID, 科目ID));
主キー
外部キー
外部キーは、他のテーブルの主キーを参照するキー
10
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
ID
購入者
商品ID
数量
1
X
1
10
2
Y
2
5
購入テーブルの外部キー「商品
ID」は、購入テーブルの主キー
ID」を参照
主キー
外部キー
購入テーブル
商品テーブル
SQL によるテーブル定義
テーブル名購入
属性名ID、購入者、商品ID、数量
属性のデータ型数値、テキスト、数値、数値
データの整合性を保つための制約主キー制約、参照整合
性制約
11
CREATE TABLE 購入 (
ID INTEGER PRIMARY KEY,
購入者 TEXT,
商品ID INTEGER,
数量 INTEGER,
FOREIGN KEY (商品ID) REFERENCES 商品(ID));
FOREIGN KEY … REFERENCES
PRIMARY KEY … REFERENCES はテーブル定義時に使用
し、あるテーブルの外部キーが別のテーブルの主キー参照
する「参照整合性制約」を示す
12
SQL の書き方
ID
商品名
単価
1
みかん
50
2
りんご
100
3
メロン
500
ID
購入者
商品ID
数量
1
X
1
10
2
Y
2
5
主キー
外部キー
CREATE TABLE 購入 (
ID INTEGER PRIMARY KEY,
購入者 TEXT,
商品ID INTEGER,
数量 INTEGER,
FOREIGN KEY (商品ID) REFERENCES 商品(ID));
主キー
多対多の関連の例
13
学生ID
科目ID
得点
1
1001
90
1
1002
100
2
1001
85
2
1002
90
2
1003
95
1人の学生が、複数の科目を受講する。1つの科目には
複数の学生が参加する
ID
科目名
1001
国語
1002
算数
1003
理科
ID 学生名
1
徳川家康
2
豊臣秀吉
主キー
外部キー 外部キー
主キー
データベース設計のプロセ
1.テーブル名の決
: 「従業員」、「顧客」、「商品」など、データの種類や目的に
応じた名前。
2.属性の設定
: 従業員テーブルの属性は「従業ID」、「名前」、「住所」
3.データ型の選択
: 「従業員ID」は整数型(INTEGER)、「名前」は文字列型
(TEXT)
4.制約の設
: 主キー制約など
5.索引(インデックス)の作成
: 頻繁に検索される「従業員ID」や「名前」に索引を設定。
6.テーブル間の関係性
: 「従業員」テーブルの「部署ID」が「部署」テーブルの「部署
ID」を参照(外部キーとして)。
14
10-2. 演習
15
いまから演習で行こと、注意点
次のテーブルを作成
Access での注意点】
SQLビューでは、SQL文を1つずつ実行
(複数まとめての一括実行ができない)
CREATE TABLE では、「実行」の後、画面が変化しない
が実行できている
INSERT INTO では、「実行」の後、確認表示が出る。そ
の後、画面が変化しないが実行できている 16
商品 購入
演習1.Access SQL
ビューを用いたテーブル定
とデータの追加
トピックス
SQLビューを開く
SQL文の編集
create table
insert into
primary key
foreign key … references
SQL文の実行 17
演習
1. パソコンを使用する
前もって Access をインストールしておくこと
2. Access 起動する
3. Access で、「空のデータベース」を選び、「作成」を
クリック.
18
4. テーブルツール画面が表示されることを確認
19
5. 次の手順で、SQLビューを開く.
20
デザイン」タブで、「
」を展開し「SQL
ビュー」を選ぶ
作成」タブで、
クエリデザイン
をクリック
このような
表示が出た
ときは
閉じる」を
クリック
21
6. SQL ビューに、次の SQL を1つずつ入れ、「実行」ボ
タンで、SQLを実行.結果を確認
CREATE TABLE 商品 (
ID INTEGER PRIMARY KEY,
商品名 TEXT,
単価 INTEGER);
CREATE TABLE 購入 (
ID INTEGER PRIMARY KEY,
購入者 TEXT,
商品ID INTEGER,
数量 INTEGER,
FOREIGN KEY (商品ID) REFERENCES 商品(ID));
INSERT INTO 商品 VALUES(1, 'みかん', 50);
INSERT INTO 商品 VALUES(2, 'りんご', 100);
INSERT INTO 商品 VALUES(3, 'メロン', 500);
INSERT INTO 購入 VALUES(1, 'X', 1, 10);
INSERT INTO 購入 VALUES(2, 'Y', 2, 5);
INSERT INTOでは、「実行」の後、確認
表示が出る。その後、画面が変化しない
が実行できている
CREATE TABLE では、「実行」の後、画面が
変化しないが実行できている
間違ってしまったときは、テーブルの削除
を行ってからやり直した方が早い場合がある
22
テーブルビューで、削除した
いテーブルを右クリックして、
削除
テーブルを削除するときは、
間違って必要なテーブルを削除しない
ように、十分に注意する!
(元に戻せない)
演習2.種々のSQL問い合わ
せ. Access SQL ビューを
使用.
トピックス
1. 単純な表示
2. 結合
23
Access SQL ビューを用いた問い合わせ
Access SQLビュー開く
SQL 編集select, from, where を使用
: select * from テーブル名 where 1 = 1;
SQL 実行
実行の結果、データシートビューに画面が変わり、そこに
問い合わせの結果が表示される
さらにSQL 文の編集、実行を続ける場合には、画面を
SQL ビューに切り替える
24
25
SQL 問い合わせ(クエリ)で使用する2つのビュー
SQL ビュー
SQL 文の作成編集 データシートビュー
問い合わせ(クエリ)
結果
実行
表示 + SQL ビュー
マウス操作でビューを切り替え
1. 次の手順で、SQLビューを開く.
26
デザイン」タブで、「
」を展開し「SQL
ビュー」を選ぶ
作成」タブで、
クエリデザイン
をクリック
このような
表示が出た
ときは
閉じる」を
クリック
27
2. SQL ビューに、次の SQL を1つずつ入れ、「
」ボタンで、SQLを実行.結果を確認
1. 単純な表示
SELECT * FROM 商品;
2. 単純な表示
SELECT * FROM 購入;
28
(続き)
3.結合
SELECT 購入.購入者, 商品.商品名, 商品.単価 * 購入.数量
FROM 購入
INNER JOIN 商品 ON 購入.商品ID = 商品.ID;
自習1.いまの2つのテーブルを結合して、購入者、
商品名、数量、単価を次のよに得る SQL を作成
しなさい
29
自習1の正解例
SELECT 購入.購入者, 商品.商品名, 数量, 単価
FROM 購入
INNER JOIN 商品 ON 購入.商品ID = 商品.ID;
30
データベース設計の実践例
シナリオ
ある大学の学生、講義、および成績管理システム。
目的
学生の個人情報、登録講義、取得成績を効率的に管理。
31
「成績管理」のデータベース設計の実践例
シナリオ
ある大学の学生、講義、および成績管理システム。
目的
学生の個人情報、登録講義、取得成績を効率的に管理。
学生テーブル:
属性: 学生ID (キー), 名前, 専攻
主キー: 学生ID
講義テーブル:
属性: 講義ID (キー), 講義名, 当教員
主キー: 講義ID
成績テーブル:
属性: 学生ID (部キー), 講義ID (外部キー), 成績
外部キー: 学生ID (学生テーブル参照), 講義ID (講義テーブル参照)
主キー: 学生IDと講義ID
32
演習3.成績管理のデータ
ベース
33
トピックス
SQLビューを開く
SQL文の編集
create table
insert into
primary key
foreign key … references
SQL文の実行
1. 次の手順で、SQLビューを開く.
34
デザイン」タブで、「
」を展開し「SQL
ビュー」を選ぶ
作成」タブで、
クエリデザイン
をクリック
このような
表示が出た
ときは
閉じる」を
クリック
35
2. SQL ビューに、次の SQL を1つずつ入れ、「実行」ボ
タンで、SQLを実行.結果を確認
CREATE TABLE 学生 (
学生ID INTEGER PRIMARY KEY,
名前 TEXT,
専攻 TEXT
);
CREATE TABLE 講義 (
講義ID INTEGER PRIMARY KEY,
講義名 TEXT,
担当教員 TEXT
);
CREATE TABLE 成績 (
学生ID INTEGER,
講義ID INTEGER,
成績 INTEGER,
PRIMARY KEY (学生ID, 講義ID),
FOREIGN KEY (学生ID) REFERENCES 学生(学生ID),
FOREIGN KEY (講義ID) REFERENCES 講義(講義ID)
);
CREATE TABLE では、「実行」の後、画面が
変化しないが実行できている
36
3. SQL ビューに、次の SQL を1つずつ入れ、「実行」ボ
タンで、SQLを実行.結果を確認
INSERT INTO 学生 VALUES (1, '山田太郎', '情報科学');
INSERT INTO 学生 VALUES (2, '鈴木花子', '物理学');
INSERT INTO 学生 VALUES (3, '佐藤一郎', '化学');
INSERT INTO 講義 VALUES (101, 'プログラミング基礎', '田中健');
INSERT INTO 講義 VALUES (102, '物理学入門', '伊藤博');
INSERT INTO 講義 VALUES (103, '有機化学', '中村悟');
INSERT INTO 成績 VALUES (1, 101, 85);
INSERT INTO 成績 VALUES (1, 102, 90);
INSERT INTO 成績 VALUES (2, 101, 75);
INSERT INTO 成績 VALUES (2, 103, 80);
INSERT INTO 成績 VALUES (3, 103, 95);
INSERT INTOでは、「実行」の後、確認
表示が出る。その後、画面が変化しない
が実行できている
演習4.種々のSQL問い合わ
せ. Access SQL ビューを
使用.
トピックス
1. 単純な表示
2. 結合
37
38
1. SQL ビューに、次の SQL を1つずつ入れ、「
」ボタンで、SQLを実行.結果を確認
1. 単純な表示
select * from 学生;
2. 単純な表示
select * from 講義;
39
2. SQL ビューに、次の SQL を1つずつ入れ、「
」ボタンで、SQLを実行.結果を確認
3. 単純な表示
select * from 成績;
4. 結合
select 学生.名前, 学生.専攻, 成績.講義ID, 成績.成績
from 学生 inner join 成績 on 学生.学生ID = 成績.学生ID;
40
自習2. 3つのテーブルの結合
INNER JOIN … ON を2回書くことにより、3つ
のテーブルを結合できることを知る
次の SQL Access で実行してください
SELECT 学生.名前, 学生.専攻, 講義.講義名, 講義.担当教員, 成績.成績
FROM (講義 INNER JOIN 成績 ON 講義.講義ID = 成績.講義ID)
INNER JOIN 学生 ON 成績.学生ID = 学生.学生ID;
Access は機能限定されています。SQL の世界標準ではもっと簡単な書き方があります。
SELECT 学生.名前, 学生.専攻, 講義.講義名, 講義.担当教員, 成績.成績
FROM 講義
INNER JOIN 成績 ON 講義.講義ID = 成績.講義ID
INNER JOIN 学生 ON 成績.学生ID = 学生.学生ID;
自習3.Access のリレーションシップインド
の機能
次の手順で、リレーションシップインドを開き、
テーブル間の関連が視覚的に表示されることを確認
1.メニューバーで「データベースツール」を選択
2.「リレーションシップ」をクリック
41
テーブル名と属性
四角の中に表示
主キー:
鍵マークで表示
外部キーが参照する別のテーブルの主キー
テーブル間の線
全体まとめ
リレーショナルデータベースの仕組み
データはテーブルと呼ばれる表形式で保存され、テーブル間
は関連で結ばれる。
主キー (PRIMARY KEY)
テーブル内の各行を一意に識別するためのキー。例えば、商
品テーブルでは各商品に一意のIDが割り当てられる。
外部キー (FOREIGN KEY)
他のテーブルの主キーを参照する。例えば、購入テーブルの
「商品ID」は商品テーブルの主キー「ID」を参照する。
データベース設計のプロセス
テーブル名の決定、属性の設定、データ型の選択、制約の設
定、索引の作成、テーブル間の関係性の設定などが含まれる。
42
SQLスキルの向上
データベース設計の学習は、SQLスキルの向上に貢献します。
主キーと外部キーの設定、テーブルの作成、データの追加、
問い合わせ(クエリ)などを反復練習することで、SQLの基
本的な文法と構造を深く理解することができます。このスキ
ルは、データベース管理やデータ分析の分野で重要です。
データベース運用スキル
データベース設計の学習は、データベース運用スキルにつながりま
す。テーブル間の関係性の理解、データの整合性の維持などを理解
することにより、データベースの設計から実装、メンテナンスに至
るまでの全プロセスに関わる運用スキルを身につけることができま
す。
問題解決能力と論理的思考力
データベースの設計プロセスでは、複数の要素を考慮し、最
適な構造を決定する必要があります。このプロセスは、問題
に対する解決策を考え、論理的に推論する能力に深くかかわ
ります。
43