データベースシステムの種類と選び方

データベースはシステム開発に必要不可欠なソフトウェアの1つです。データを蓄積する仕組みがあると、システム機能の幅が広がります。

いろいろありすぎて、どれを選んでいいか分からないことが多々あると思います。

この記事では、データベースシステムの種類と選び方について説明します。

どれを使えばいい?データベースシステムの選び方

  • 大量データや、複数ホストからの大量アクセスが見込まれ、テーブル定義をある程度固定できるのであれば、インストール型のリレーショナルデータベース
  • データ量は比較的少なく、アクセス数もそこまで多くないのであれば、ポータブル型のリレーショナルデータベース
  • テーブル定義が未確定で、柔軟に変更したいのであれば、NoSQLデータベース

最初に結論から書いてみました。最初に結論があると、余計な文章を読まなくて済むので、時間を有効的に使えます。

大量データを高速にアクセスする必要があるのであれば、インストール型のデータベースマネジメントシステムを使用する必要があります。データベースは安定稼働する必要がありますので、ポータブルよりも安全です。また、複数ホストからのアクセスがある場合は、インストール型のDBマネジメントシステムで一極集中する方が安全です。

データ量が多くなければ、ポータブル型でもいいと思います。ポータブル型であればDBマネジメントシステムのインストールが不要になりますので、環境構築が簡単です。

テーブル定義が未確定で、柔軟に変更したいというシステム要件がある場合は、NoSQLデータベースを検討するといいと思います。アジャイル開発など、これから先の仕様変更を幅広く受け付けるためには、テーブル定義を柔軟に変更したいという要件も多々あります。そんなときは、NoSQLデータベースがいいでしょう。

リレーショナルデータベース(インストール型)

リレーショナルデータベースとは、あらかじめ定義された表形式のテーブルを持つデータベースシステムです。

ユニークキー項目と情報項目に分かれているのが一般的です。

例えば、以下のような「社員マスタ」というテーブルがあったとします。

社員番号 名前 役職
A01 山田 部長
A02 田中 課長
A03 佐藤 主任

ユニークキー項目とは、そのテーブルの中で値が重複しない項目のことです。

例えば、「名前」だけを見れば同じ会社に同姓同名の人がいてもおかしくありません。そのため、「名前」はユニークキーにはなれません。
「役職」も同様です。1つの会社の中には複数の部や課がありますので、部長や課長は複数人いるはずです。「役職」もユニークキーにはなれません。

「社員番号」を1人ずつに割り当てて、同姓同名の人がいても違う番号を割り振るようにすれば、これはユニークキーになります。

リレーショナルデータベースシステムの製品で、インストールが必要なものは、主に以下のような製品があります。

  • Oracle
  • Microsoft SQL Server
  • MySQL
  • PostgreSQL

このうち、MySQLやPostgreSQLはオープンソースですので、自由に使うことができます。

MySQL

PostgreSQL

Oracle や Microsoft SQL Server は有償の製品ですが、無償版もあるようです。

Oracle Database XE

Microsoft SQL Server

それぞれ、基本的なSQL構文は同じですが、少しずつ違う文法が見られます。ストアドプロシージャをプログラミングするときには、注意が必要です。

リレーショナルデータベース(ポータブル型)

上記はインストールが必要な製品であるのに対して、以下はデータベースマネジメントシステムが不要でデータを持ち運べる製品です。

  • SQLite

SQLite とは、*.dbなどのファイルにデータが格納され、このファイルを持ち運ぶことでどのホストからでもアクセスができるようになります。データの抽出や更新は、各プログラミング言語で用意されているライブラリを使用します。

SQLite のデータベースの作成や初期データ登録は、DB Browser for SQLite が便利です。

DB Browser for SQLite

NodeJS, TypeScript やC#など、様々なプログラミング言語で使用可能です。

TypeScriptでは、以下のコードでJSONファイルに出力することができます。

import {Database} from "sqlite3"
import * as fs from "fs"

function FNC_Sqlite3DB2Json(P_IN_DBPath: string, P_IN_SQL: string, P_IN_OutJsonFilePath: string) {

    try {
        let db:Database = new Database(P_IN_DBPath);
        db.all(P_IN_SQL, (err, rows) => {
            fs.writeFileSync(P_IN_OutJsonFilePath, JSON.stringify(rows))
        })
        return 0;

    } catch (err) {
        return 4;
    }

}

NoSQLデータベース

NoSQLとは、キーバリューストアのように、キー項目を定義して、情報項目を柔軟に設定できるデータベースシステムです。

例えば、以下のような「社員マスタ」というテーブルをNoSQLで定義するとします。

社員番号 名前 役職 国籍
A01 山田 部長 日本
A02 田中 課長 アメリカ
A03 佐藤 主任 -

「社員番号」「名前」「役職」までは最初に定義しており、後から「国籍」を追加したとします。

リレーショナルデータベースでは、「国籍」を追加するよう、テーブル定義の変更が必要になりますが、NoSQLでは、テーブル定義の変更は不要です。

NoSQLでは、キー項目を「社員番号」とし、これ以外が情報項目になります。情報項目は、全て存在するレコードもあれば、存在しないレコードもあります。

NoSQLを実現するものは以下があります。

  • AWS DynamoDB
  • Mongo DB
  • JSON

JSONはシステムではなく、実際にはファイル形式ですが、キーバリューストア形式で情報を保存する仕組みとしては、JSONでも実現できます。

AWS DynamoDB

Mongo DB

JSON

コメント

タイトルとURLをコピーしました