データベース
コンピュータでデータを扱う方法として、ファイルを利用する方法と、データベースを利用する方法があります。
データベースは、データを一括管理する方式(アプリケーション)のことです。
データベースとファイルの違い
データ項目の重複がある。
ファイルでデータを管理すと、項目Aを2つのファイルに持たせた場合項目Aを重複させないと関連がわからなくなる。
データベースの設計
データモデルとは、データをモデル化したもの。
モデル化とは、いろんな場所で使用される言葉だが、データのモデル化とはシンプルにまとまりをつけるということ。
データモデル=テーブル
色んな言葉で表現されることが多いので、はっきり言って混乱しますが、まとめると「データモデル」=「テーブル」のことです。言葉を変えると何かしらの物事をデータとしてあらわすために、並べた項目の塊のことを「データモデル」と呼んでいるようです。※はっきりとした記述が見つからなかったのでこの様に記載します。
モデル化の例
学校の生徒をデータモデル化することを感が増す。
- 学生には本人の情報として、氏名、年齢、住所、電話番号があります。
- 学生には学校の成績として、国語、数学、英語、理科、社会の生成器があります。
- 学生には学校内の活動として部活動があり、委員会がありますが、すべての学生が活動に参加する必要はありません。
まずは、上のような前提条件があったとします。
この時に、データ(モデル)として下のような表(モデル)ができます。
学生氏名 | 学生年齢 | 学生住所 | 学生電話番号 |
---|---|---|---|
一抹太郎 | 15 | 北海道1番地 | 01234 |
二審次郎 | 16 | 北海道2番地 | 11234 |
三振三郎 | 17 | 北海道3番地 | 21234 |
四面史郎 | 18 | 北海道4番地 | 31234 |
しかし、このモデルでは、上記の1番しか満たすことができません。
なので次は、成績のデータをモデル化します。
学生氏名 | 国語 | 数学 | 英語 | 理科 | 社会 |
---|---|---|---|---|---|
一抹太郎 | 15 | 20 | 30 | 40 | 50 |
二審次郎 | 16 | 20 | 30 | 40 | 50 |
三振三郎 | 17 | 20 | 30 | 40 | 50 |
四面史郎 | 18 | 20 | 30 | 40 | 50 |
これで、1番と2番の要件を満たすことができそうです。
しかし、これではデータが別々で関連付けることができません、なので「学籍番号」を追加します。
そして、各モデル(表)に名前を付けます。「<>」の中身が表の名前です。そしてテーブル名がついたので、重複する文字を削除してしまいます。テーブル名を見れば人間は理解できるからです。
<学生テーブル(表)>
学籍番号 | 氏名 | 年齢 | 住所 | 電話番号 |
---|---|---|---|---|
001 | 一抹太郎 | 15 | 北海道1番地 | 01234 |
002 | 二審次郎 | 16 | 北海道2番地 | 11234 |
003 | 三振三郎 | 17 | 北海道3番地 | 21234 |
004 | 四面史郎 | 18 | 北海道4番地 | 31234 |
<成績テーブル(表)>
学籍番号 | 学生氏名 | 国語 | 数学 | 英語 | 理科 | 社会 |
---|---|---|---|---|---|---|
001 | 一抹太郎 | 15 | 20 | 30 | 40 | 50 |
002 | 二審次郎 | 16 | 20 | 30 | 40 | 50 |
003 | 三振三郎 | 17 | 20 | 30 | 40 | 50 |
004 | 四面史郎 | 18 | 20 | 30 | 40 | 50 |
上のようにすると、学籍番号をキーにして、ふたつの表を関連付けることができます。
一例としては学籍番号「001」の学生は15歳で、国語の成績は15です。
プログラム的に見ると、「学生テーブルの学籍番号001の年齢」と「成績テーブルの学籍番号001の国語」を取得した形となります。
Javaで表現すると?
テーブルをJavaプログラムで表現することもできます。早い話が、データクラス(データモデル・クラス)を作成してやればよいということです。
色んな言葉と使いましたが、早い話が下のようなクラスです。
- フィールド変数がある(データの項目)
- フィールド変数を取得、セットするメソッドがある
これだけです。
上の<成績テーブル(表)>をJavaで表現すると、次のようなコードになります。フィールド変数とゲッターセッターのみのクラスです。データ・クラスとかエンティティクラスなどと呼ばれます。
public class SeisekiData {
/** 学籍番号 */
private String studentNo;
/** 学生氏名 */
private String studentName;
/** 国語 */
private int japanese;
/** 数学 */
private int math;
/** 英語 */
private int english;
/** 理科 */
private int science;
/** 社会 */
private int society;
/**
* @return studentNo
*/
public String getStudentNo() {
return studentNo;
}
/**
* @param studentNo セットする studentNo
*/
public void setStudentNo(String studentNo) {
this.studentNo = studentNo;
}
/**
* @return studentName
*/
public String getStudentName() {
return studentName;
}
/**
* @param studentName セットする studentName
*/
public void setStudentName(String studentName) {
this.studentName = studentName;
}
/**
* @return japanese
*/
public int getJapanese() {
return japanese;
}
/**
* @param japanese セットする japanese
*/
public void setJapanese(int japanese) {
this.japanese = japanese;
}
/**
* @return math
*/
public int getMath() {
return math;
}
/**
* @param math セットする math
*/
public void setMath(int math) {
this.math = math;
}
/**
* @return english
*/
public int getEnglish() {
return english;
}
/**
* @param english セットする english
*/
public void setEnglish(int english) {
this.english = english;
}
/**
* @return science
*/
public int getScience() {
return science;
}
/**
* @param science セットする science
*/
public void setScience(int science) {
this.science = science;
}
/**
* @return society
*/
public int getSociety() {
return society;
}
/**
* @param society セットする society
*/
public void setSociety(int society) {
this.society = society;
}
}
関係モデル
上の様な形で表と表に関連性を持たせた表(モデル)を「関係モデル」といい、そのようなデータベースを「リレーショナルデータベース」と呼びます。
そして、これらの表に行う操作の種類としては次のものがあります。
名前 | 説明 |
---|---|
挿入 | テーブルにデータを挿入(INSERT)します |
更新 | テーブルのデータを更新(UPDATE)します |
削除 | テーブルのデータを削除(DELETE)します |
これらの操作を行うプログラム言語をSQLと呼びます。
SQL
SQLは、データベースの操作に使用するプログラム言語で、用途は上記のようなものとなります。
しかし、「どう使うの?」という疑問に関しては学習する以外に理解のしようがありません。
なので、簡単に、DBを作り使用できる方法を考えました。というか見つけました。
H2DBを使用する方法です。こちらのサイトからH2DBをダウンロードできます。
SQLを実行して理解するほうが、本を10回読むよりもちゃんと理解できます。
H2DBをインストール
こちらのリンクが、H2DBのサイトになります。
英語ばかりですが、臆することはありません。赤枠の部分をクリックすればよいのです。
すると「h2-setup-2019-03-13.exe」というようなファイルがダウンロードできるはずですので、これを起動してインストールします。そして、以下の手順に従います。
- H2DBを起動する ※H2 Consoleという名前があるのでそれをクリック
- 下のような画面があるので、赤枠の部分にDBを作成するフォルダとファイル名を指定する
※「D:\Apps\H2\」のフォルダに「database.mv.db」ができます。
そして、ユーザー名などは指定していないので、未入力の状態にして「接続」をクリックします。
すると下のような、画面が見れますので、赤枠をクリックします。
すると下のようなSQLが生成されて、実行する事ができます。
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));
INSERT INTO TEST VALUES(1, 'Hello');
INSERT INTO TEST VALUES(2, 'World');
SELECT * FROM TEST ORDER BY ID;
UPDATE TEST SET NAME='Hi' WHERE ID=1;
DELETE FROM TEST WHERE ID=2;
作成されたテーブルは、サンプルのテーブルです。とりあえず作成されたことを確認できますのでこれを実行します。
実行して、テーブルが作成されたことを確認したら、「切断」して初めの画面に戻ります。
データベースの概念設計
現場では、論理設計などと呼んだりします。具体的にはER図を作成しテーブル間のデータ関係を明確にします。
テーブル(表)のカラム(列)同士を矢印で結び関係性を示します。
では、実際にDBを起動してみましょう。
現状はここまでです。まだまだ更新します。