基本情報技術者試験 ~暗記物「データベース」~

データベース

コンピュータでデータを扱う方法として、ファイルを利用する方法と、データベースを利用する方法があります。
データベースは、データを一括管理する方式(アプリケーション)のことです。

データベースとファイルの違い

データ項目の重複がある。

ファイルでデータを管理すと、項目Aを2つのファイルに持たせた場合項目Aを重複させないと関連がわからなくなる。

データベースの設計

データモデルとは、データをモデル化したもの。
モデル化とは、いろんな場所で使用される言葉だが、データのモデル化とはシンプルにまとまりをつけるということ。

データモデル=テーブル

色んな言葉で表現されることが多いので、はっきり言って混乱しますが、まとめると「データモデル」=「テーブル」のことです。言葉を変えると何かしらの物事をデータとしてあらわすために、並べた項目の塊のことを「データモデル」と呼んでいるようです。※はっきりとした記述が見つからなかったのでこの様に記載します。

モデル化の例

学校の生徒をデータモデル化することを感が増す。

  1. 学生には本人の情報として、氏名、年齢、住所、電話番号があります。
  2. 学生には学校の成績として、国語、数学、英語、理科、社会の生成器があります。
  3. 学生には学校内の活動として部活動があり、委員会がありますが、すべての学生が活動に参加する必要はありません。

まずは、上のような前提条件があったとします。

この時に、データ(モデル)として下のような表(モデル)ができます。

学生氏名 学生年齢 学生住所 学生電話番号
一抹太郎 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」というようなファイルがダウンロードできるはずですので、これを起動してインストールします。そして、以下の手順に従います。

  1. H2DBを起動する ※H2 Consoleという名前があるのでそれをクリック
  2. 下のような画面があるので、赤枠の部分に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を起動してみましょう。

現状はここまでです。まだまだ更新します。

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す