データベース技術
第6回(2015.11.3)
1
データベースの設計について
•データベース設計はシステム設計の一部
業務の分析
要件定義
基本設計
論理設計
詳細設計
今の業務はどうなっているのか
何をしたいのか
どんなシステムにすべきか
どのように実現するか
方法を明確にする
データベース設計は
この段階に含まれる
データベースの設計
=データベースの構造を設計する
2
スキーマ
• データベースの構造をスキーマと呼ぶ
• スキーマは3つの構造に分類される
- 概念スキーマ
• 論理的な構造を定義する
• ER図の作成、テーブルの設計、論理設計、概念設計
- 外部スキーマ
• ユーザから見たデータベースを定義する
• ビューの設計
- 内部スキーマ
• コンピュータ内部から見たデータベースを定義する
• 物理的な部分を定義する
• 容量、メモリ設計、物理設計、物理配置設計、インデックス設計
3
概念スキーマ
•データの論理的な構造を設計する段階
- 現実世界をいかにコンピュータに置き換えるか考える
- 情報の流れを分析し、データベース化する部分を決定
•表を作って正規化する
•ER図を書く
•各テーブルのデータの型や長さを決定する
4
表を作って正規化する
•例:果物の輸出に関するデータ
報告書コード 日付 輸出先コード
1101 3/5 12
1102 3/7 23
1103 3/8 25
輸出先コード 輸出先名
12 アメリカ
23 中国
25 フランス
「売上」表 「輸出先」表
商品コード 商品名 単価
101 メロン ¥800
102 いちご ¥150
103 りんご ¥120
104 レモン ¥200
報告書コード 商品コード 個数
1101 101 1,100
1101 102 300
1102 103 1,700
1103 104 500
「商品」表「売上明細」表
5
ER図を書く
商品コード
商品名
単価
輸出先コード
輸出先名
報告書コード
日付
輸出先コード
「商品」表
「輸出先」表「売上」表
1
*
1*
報告書コード
商品コード
個数
「売上明細」表
1*
6
データの型や長さを決める(1)
「輸出先」表
「売上」表
フィールド名 データ型 長さ 制約
報告書コード INT 10 PRIMARY KEY, NOT NULL, AUTO_INCREMENT
日付 DATE NOT NULL
輸出先コード INT 3 FOREIGN KEY
フィールド名 データ型 長さ 制約
輸出先コード INT 3 PRIMARY KEY, NOT NULL
輸出先名 VARCHAR 40 NOT NULL
※ AUTO_IMCREMENT:自動的に連番が格納される
※ PRIMARY KEYを指定すると、自動的にNOT NULL, UNIQUEと判断される。
 ここでは NOT NULLを明示している。
7
データの型や長さを決める(2)
「商品」表
フィールド名 データ型 長さ 制約
商品コード INT 4 PRIMARY KEY, NOT NULL
商品名 VARCHAR 40 NOT NULL
単価 INT 10
「売上明細」表
フィールド名 データ型 長さ 制約
報告書コード INT 10 PRIMARY KEY, NOT NULL
商品コード INT 4 PRIMARY KEY, NOT NULL
個数 INT 5 NOT NULL
※「売上明細」表は報告書コードと商品コードを主キーとしている(複合キー)。
 これは扱い難い場合があるので、明細IDなどを主キーとして設けることもある。
8
外部スキーマ
•ユーザから見やすいデータベースを設計する
- 概念スキーマで設計された表は効率の良い形だが、 
ユーザにはわかり難い
- 外部スキーマではユーザが扱いやすい「見える」表
(ビュー View)を定義する
日付 輸出先コード 商品コード 個数
3/5 12 101 1,100
3/6 25 102 300
日付 輸出先名 商品名 個数
3/5 アメリカ メロン 1,100
3/6 フランス いちご 300
わかり難い
わかりやすい
9
内部スキーマ
•コンピュータ内部の物理的な設計を行う
- ディスクのどこに作成するか?
- データベースのファイル名は?
- データサイズはどのくらいか?
- バックアップメディアは何を使うか?
•ハード的な仕様の決定は重要
- データベースの処理速度に大きな影響を持つ場合がある
10
データベースの設計について
•データベース設計はシステム設計の一部
業務の分析
要件定義
基本設計
論理設計
詳細設計
今の業務はどうなっているのか
何をしたいのか
どんなシステムにすべきか
どのように実現するか
方法を明確にする
データベース設計は
この段階に含まれる
データベースの設計
・概念スキーマ ←今ここ
・外部スキーマ
・内部スキーマ
11
Work:概念スキーマを作成する
•各自でテーマを決定する
•データベースの概念スキーマを定義しましょう
- 表を作って正規化する
- ER図を書く
- 各テーブルのデータの型や長さを決定する
•manabaにコメントを記載しました
•コメントを確認し修正をしてみましょう
•修正後のファイルを提出
先週の
12
データベースを構築する(1)
•DBMS(Database Management System)を使う
- SQLによるアクセス機能
• SQLにより条件指定、ソートなど高度な検索が可能
- 高速な検索機能
• インデックスを持つことにより、高速に検索可能
- 排他制御機能
• 行単位、ファイル単位のロック機能により、排他制御が可能
- トランザクション管理機能
• トランザクション単位の更新や復帰が可能
- ログ管理機能
• アクセスログにより復旧が可能
13
データベースを構築する(2)
•代表的なRDMBS
- Oracle Database(Oracle社)
- SQL Server(Microsoft社)
- PostgreSQL(オープンソース)
- Microsoft Access(Microsoft社)
- MySQL(オープンソース)
- SQLite(パブリックドメイン)
14
SQLの機能
•SQL:リレーショナルデータベースを操作する
ためのデータベース言語
- データ定義言語DDL(Data Definition Language)
• 表を作成する、変更する、削除する
- データ操作言語DML(Data Management Language)
• データを入力する、抽出する、削除する、変更する
- データ制御言語DCL(Data Control Language)
• ユーザのアクセスなどを管理する
15
SQLiteの基礎知識(1)
•コマンドラインツールを使って操作する
•起動方法:SQLiteアイコンをクリック
※大学の環境とは
見た目が違います
16
SQLiteの基礎知識(2)
•SQL文は最後に「;」が入力されるまでがひとつ
のSQL文として扱われる
•「;」の後にEnterキーを押すことで実行される
•長いSQL文の場合は、途中でEnterキーを押して
もOK(「;」が入力されるまでが1文)
17
SQLiteの基礎知識(3)
•長いSQL文の場合は、途中でEnterキーを押して
もOK(「;」が入力されるまでが1文)
18
SQLiteの基礎知識(4)
•識別子
- テーブル名、カラム名、データベース名
•SQLiteのキーワード
- Database、Table、Create、Selectなどなど
•SQLiteのキーワードは識別子に使用しない
19
SQLiteを操作してみよう
•SQLiteを起動する
•接続中のデータベースを確認する
•接続していたデータベースから切断する
•データベースを作成する
•テーブルを作成する
20
接続中のデータベースの確認
•「.database」コマンドを実行する
- 「.database」と入力しEnterキーを押す
データベース名
ファイル名
データベースの
内容を記録する
21
接続中のデータベースから切断
•「.exit」コマンドを実行する
- 「.exit」と入力しEnterキーを押す
22
データベースの作成(1)
•コマンドプロンプト上で下記のように入力する
- sqlite3 データベース名
- 例:sqlite3 shop.sqlite3
23
データベースの作成(2)
•コマンドで指定する「データベース名」
- 「データベース名」で指定したデータベースが存在し
なければ自動で新規作成され、接続する
- SQLiteが設置してあるディレクトリ(フォルダ)に
「データベース名」で指定したファイルが作成さる
(環境により変わることがあります)
24
データベースの作成(3)
•データベースのファイルの設置場所
- 自分の指定した場所にデータベースのファイルを設置
したい場合は、パス付きで指定する
- 例:sqlite3 d:sqlitedbsample.sqlite3
•データベース名は任意の文字列でOK
- myfriend
- myfriend.db
- myfriend.sqlite
- myfriend.sqlite3
- 推奨:何のファイルかわかるように拡張子をつける
25
テーブルの作成(1)
•基本構文
- CREATE TABLE テーブル名(カラム名1, カラム名2, ...);
•テーブルとカラム
- 名前には任意の名前を指定できる
- テーブルには少なくとも1つのカラムが必要
•練習:下記を実行してみましょう
- create table countries(id, name);
26
テーブルの作成(2)
•カラムにデータ型を指定してテーブルを作成
- CREATE TABLE テーブル名(カラム名1 データ型, カラ
ム名2 データ型, ...);
•練習:下記を実行してみましょう
- create table items(id integer, name text);
27
SQLiteのデータ型
•SQLiteでは、カラムのデータ型指定は必須では
ない
•SQLiteで指定できるデータ型
型 説明
TEXT テキスト
INTEGER 符号付整数
REAL 浮動小数点数
NONE 入力データをそのまま格納
NUMERIC 上記以外
28
テーブルの確認
•テーブル一覧を表示する
- 「.tables」コマンドを実行
•テーブルの構造を確認
- 「.schema」コマンドを実行
- テーブル作成時のCreate文が表示される
29
参考文献
•SQLite入門 http://www.dbonline.jp/sqlite/
30

データベース技術 6(Database_6)