RDBMSが社会のIT化を推進した!データベース管理システムを詳解
データを効率よく格納するものをデータベースと呼びます。ECシステムや経理システム、スマホアプリなど、私たちが日々触れているITシステムの裏側には、データベースがあるのです。
データベースは構造上、階層型データベース、ネットワーク型データベース、リレーショナル(関係)データベースに分かれています。
それぞれ特徴は違いますが、現在ほとんどのシステムはリレーショナルデータベース(RDB)を採用しています。
データベース管理システム(DBMS)とは?
RDBMS理解のためにはDBMSの概要を知っておくと便利です。
DBMSとはデータベース管理システムを指していて、RDBを含むすべてのデータベース管理システムの総称です。ユーザーがデータを操作したい時はDBMSを通じてデータベース操作ができます。
DBMSが必要な理由
なぜこのDBMSが必要なのか?ですが、例えば業務システムの場合はユーザーがデータ検索やデータの登録・変更を画面上で操作します。
画面上で操作しているため実感はわきませんが、裏ではデータベースにアクセスしています。
データベースを操作するSQL文がソースコード内に記述されていて、ユーザーが行う画面操作によりデータを操作しています。
この時、ユーザーが1人なら問題はないですが、ユーザーが1人だけのシステムはありえません。一般的なシステムでは複数のユーザーが偶然にも同時にデータベースへアクセスして同じデータを操作することは十分あり得ます。
その場合はどちらかのユーザーの操作を優先し、どちらかのユーザーの操作をストップさせないとデータに不整合が生じます。同時書き込みができないので、大規模なユーザーを想定したシステム作成が困難です。
また万が一、非認証ユーザーが悪意を持ってデータベースに侵入し、データ改ざんを行うこともありえます。そうなるとせっかくの情報資産が台無しです。
DBMSがない頃は、上述の問題が相次いだため、データベースが操作される前にチェックする機能が必要となりました。それがDBMSになります。
DBMS導入によりデータベースの操作性・安全性が大幅に向上しました。
DBMSはデータベースの種類ごとにそれぞれDBMSが存在します。
リレーショナルデータベースマネージメントシステム(RDBMS)とは?
勘の良い方ならお気づきでしょうが、RDBMSはRDBのDBMSです。他のDBMSと重複する特徴を含めてRDBMSの特徴を紹介します。
関係モデルをベースにした管理システム
RDBMSはデータを2次元の表形式で管理します。そして、小さな表をたくさん作り、それらの表を決まった列で関係づけることで大量のデータを管理、運用しています。
例を挙げて紹介します。ここに社員表と部門表というデータベースに登録された表があるとします。
特徴は以下の通りです。
社員表:列はID(※主キー)、社員名、年齢、部署番号で構成されている。
部門表:列は部署番号(主キー)、部署名で構成されている。
※主キーに設定した列は重複した値を格納できません。
この場合、部門番号で異なった表を関係付けることで1つの大きなデータとして取得したり変更したりすることができます。
膨大なデータを1つの表で管理するとどこにどんなデータがあったのか探すのも大変ですし、データ操作が重くなります。関係モデル構造でデータを扱うことでデータ管理・操作が簡単になります。
データの完全性
不正なデータの登録・更新を防いでくれます。データベースで作る表は、データ型や制約(CHECK、主キーなど)を設定できます。望んでいないデータが格納されるのを防ぐため、RDBMSでは、ユーザーが登録しているデータが適切か否かを判断し、否の場合はユーザーに不正データであることを知らせ、適切なデータ入力を促します。
トランザクション処理
複数ユーザーが存在する場合に同時に同一のデータを更新した場合でも矛盾なく、処理を完了します。
例えば、ユーザーAとユーザーBがいて、ユーザーAがあるデータのSALARY列を100→200にお試しでUPDATEしたとします。この時点ではまだ未COMMITです。
その状況でユーザーBが同じデータを見た時にSALARYは100のままです。ユーザーAがUPDATEしてもCOMMITでトランザクション処理を終了させるまで処理は確定しません。これによりデータの矛盾が起きずに正常な値を取得できます。
セキュリティ
多くのRDMSでは、任意アクセス制御機能を提供することでセキュリティを担保しています。管理者がアクセス権限を付与したユーザーのみデータアクセスを可能にするアクセス制御を行っています。GRANT文やREVOKE文を使ってアクセス権限を制御します。
RDBMSを操作するためには
ほとんどのRDBMSはSQLで操作します。RDBMSを操作するSQLは大きく4つに分類ができます。
データ定義言語(DDL)
1つ目はデータ定義言語(DDL)です。表を作るためのCREATE TABLEなどデータベース使い始め段階でよく利用します。いわば、データを保存するための箱を作ったり、削除したりするのがDDLです。
データ操作言語(DML)
2つ目はデータ操作言語(DML)です。これは、一番使うSQLでINSERTやUPDATEなどを使ってデータを新規追加したり、更新したりします。
トランザクション制御
そして3つ目はトランザクション制御です。トランザクション処理でも記載していますが、DMLでデータを変更しただけでは、データベース上に反映されません。COMMITで処理を確定することでデータ操作処理が確定します。逆に言えば、COMMITを実行するまでは、どれだけINSERT文を実行しても、DELETE文を実行しても処理は確定しません。
データ制御言語(DCL)
最後の4つ目はデータ制御言語(DCL)です。GRANT(アクセス権限の付与)、やREVOKE(アクセス権限の取消)を使ってユーザーの権限を制御します。DCLがRDMSにおけるセキュリティの大きな役割を担っています。
RDBMSに該当するソフトウェア
有償RDBMS
代表的な有償RDMSはOracleDBです。OracleDBは、世界ではじめての商用RDBMSです。圧倒的なシェアを握っており、RDBMSと言えば、OracleDBと言われるほどです。
他にはIBM DB2やMicrosoft SQL Serverがあります。費用を支払っている分、サポートが充実していますし、特にセキュリティ面が強いのが特長です。
無償RDBMS
代表的なオープンソースは、MySQLやPostgreSQLが有名です。簡単に使い始められますが、無料なのでサポートはほぼありません。
RDBMSに新たなライバル出現!?NoSQLとの比較
最近では、SQLを使わずに操作できるNoSQLが注目されています。NoSQLは、RDBMSの弱点である「スピードの遅さ」「柔軟性の低さ」といった部分を補うために生まれたデータベースです。
TwitterやFacebookに使われているCassandraや、LINEやニコニコ動画でも使われているRedisもNoSQLです。
NoSQLの長所
NoSQLは、SQLの知識が不要でプログラミング言語が理解できれば、ある程度操作が可能です。
NoSQLは主に4つのタイプに分けられ、中でも特に使いやすいKey-Valueストアは、プログラミングで使うリスト、マップ構造でデータを保存します。
RDBMSは1つのデータに対して複数のデータが紐づいていますが、Key-Valueストアは1対1です。単純な構造をしているためデータ登録や取得が簡単にできることから大量のデータを扱うのに向いています。
NoSQLの短所
一方でデータのUPDATEやDELETEには不向きなので、複雑な処理ができません。実際のシステム開発やデータメンテナンスではUPDATEやDELETEを使う頻度はかなり多いため、これでは柔軟性のあるシステム開発はできません。
またNoSQLにはトランザクション処理がないため、データの信頼性に欠けます。このような理由からNoSQLがRDBMSの代わりになることはないですが、単純にデータを保存する形でのデータベースを利用する場合はNoSQLが適しているのかもしれません。
RDBMSがもたらした世界
RDBMSの出現でデータに対する確固たる信頼性が生まれました。トランザクション処理によってデータに矛盾が発生する心配が大幅に減ったからです。特にお金を扱う金融分野のIT化には大きく寄与しています。
RDBMSの出現でデータベース設計が柔軟かつ容易になりました。従来の定番構造であった従属モデルから関係モデルに変わったことで、親子関係を意識することなく自由に表を作ることができるようになったからです。そしてそれらの表を関係モデルに基づいて簡単に結合できるようになったからです。
デスクトップアプリケーションでもモバイルアプリケーションでも業務用アプリケーションであってもすべてデータベースと密接に関わっています。むしろ、データベースを使わないアプリケーションは原則存在しません。RDBMSがデータの信頼性とデータ操作の柔軟性を約束してくれたので世の中のIT化が進んだと言っても大袈裟ではなく、RDBMSのIT業界への貢献度は計り知れません。