2020.10.09 RDBMS(データベース)ってなに?

最近寒くなってきたし、今週末は台風が関東にも接近しそうだし、雨降ってばかりだし、このアイギスのブログは最近全くITっぽいことが書いてないので、ITっぽいことを書くことにしました。というこで、今日はRDBMS(データベース)について知ったかぶりができるように書いていきます。

そもそもデータベースとは、効率よくデータを使うために、一定のルールでデータを集めたもので、物理的なものではありません。なぜ、システムではデータベースが必要かというと、プログラムではデータを管理することが、現実的に不可能だからです。また、データを記録するだけならメモ帳にCSV形式で保存してもよさそうですが、データが多くなるほどこの方法だと管理することが難しくなってきます。例えば、100万人のユーザデータの中から特定の条件に合う人の氏名、住所、電話番号を抽出したり、更新したりするのCSVだとかなり非効率です。こうしたことから、データベースが必要になります。

そんなデータベースですが、SQLという言語を使って操作するデータベースとSQLを使わないデータベースの2つに大きく分かれます。私個人の感覚でデータベースというと、SQLを使うデータベースのことを指します。ちなみに、このSQLを使うデータベースはRDBMSと言います。

RDBMSですが、実際どんなものかというと、本や資料を読むように見ることも、Excelファイルのようにファイルを開いて、目で見て確認することができません。(実際にはRDBMSを操作するためのソフトウェアを使えばGUIで確認できます)
このため、実際にSQLでRDBMSを操作しながら少しずつ理解するしかないのです。これが、RDBMSってのがなんだか分かりづらい最大の要因な気がします。少なくとも私は、目でみることができないのでRDBMS(データベース)と言われてもピンときませんでした。

ただ、このままだと不完全燃焼なのであえて言います。RDBMSはExcelの表が何個もあるだけです。本当にそれだけです。
なら、「Excelで良いじゃん。」と言われそうですが、Excelはでは要求される性能に耐えられないのです。また、Excelは誰かがファイルを開いていると使用することができませんが、RDBMSは一部を除いて複数人で同時に使うことを想定して開発されていますので、一人がアクセスしていても使えるようになってます。

RDBMSはいろいろな種類があります。下のものは代表的なRDBMSです。
・Oracle Database
・Microsoft SQL Server
・PostgreSQL
・MySQL
・SQLite

共通していることはSQLという言語で操作するということです。
例えば、

select
 氏名, 誕生日
from
 ユーザー表
where
 氏名 like ‘山田%’

というSQLを実行すると、どのRDBMSでもユーザー表の氏名という列に山田から始まる文字列が登録されいた場合、その行に登録されている氏名と誕生日を抽出することができます。
そして、このRDBMS最大の特徴は表と表をくっつけて、使うことができるということです。
例えば、日本には市区町村コードと呼ばれるものがありこれをデータベースに登録しておきます。
(URL:https://www.soumu.go.jp/denshijiti/code.html)

市区町村コード表には以下のデータが登録されているとします。
コード 市区町村名
12100 千葉市
12202 銚子市
12203 市川市

ユーザー表には以下のデータが登録されているとします。
氏名     市区町村コード 住所
アイギス太郎 12203     市川南3-11-7

これに対して以下のSQLを実行します。
select
 ユーザー表.氏名,
 市区町村コード表.市区町村名||ユーザー表.住所
from 市区町村コード表 inner join ユーザー表
  on 市区町村コード表.コード = ユーザー表.市区町村コード

そうすると、
氏名     住所
アイギス太郎 市川市市川南3-11-7
が抽出されます。  

このようなことができるのをRDBMS(データベース)と言います。

知ったかぶりできるようになりましたか?
正直、私がRDBMSを知らなかったとして、この記事を読んでも知ったかぶりできません。。。いつになるか分かりません(もしかしたら永遠にこないかも)が、次回はtableについて説明します。なお、実際にシステムを作るためには排他制御等を考慮する必要がありますが、この記事の目的として ”知ったかぶり” ができれば問題ないため、そのような高度な情報を必要とする場合は専門書を買ってください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です