Zeals TECH BLOG

チャットボットでネットにおもてなし革命を起こす、チャットコマース『Zeals』を開発する株式会社Zealsの技術やエンジニア文化について発信します。現在本ブログは更新されておりません。新ブログ: https://medium.com/zeals-tech-blog

RDBの歴史をディグってみた

f:id:zeals-engineer:20190721141625p:plain

こんにちは!
4月に新卒で入社したエンジニアの荒木です。

業務ではデータの不整合を解消したり、データベースの構造を作り替えたりしています。

今回の記事のテーマは、【リレーショナルデータベース(RDB)の歴史】です。
RDBが生まれる以前のDBの歴史から、どのようにRDBが登場し、世に広まったのか、という流れを追います。

その背景としては僕が、歴史の勉強が大好きなことがあります。

単純に新たな知識・考え方が身につく、という理由もありますが、
それ以上に、物事のルーツを辿ることで、現在身の回りに当たり前のようにあるものが実は全く別の目的で生まれていたり、偶発性の産物だったりすることに好奇心が駆り立てられるからです。

僕たちが普段扱っている技術も全て、いつかの時代の何処かの国に住んでいた誰かの天才的な発見、発明の積み重ねによって確立されたものです。

遥か昔からの種々の学問的知見によって、今の技術が目の前にあると思うとワクワクしますよね!!

そこで今日は、RDBの歴史について調べてみたので、
それを極力分かりやすくシェアしたいと思います!

RDB以前のデータベースの歴史

データベースと言われると、エンジニアの方々はソフトウェアとしてのデータベースを想像するかもしれませんが、 広義に解釈されるデータベースは、もっと昔から存在します。

例えば、「鳴くよ(794年)ウグイス平安京」 と言いますが、
何年に起こったことなのかが判明しているということは、少なくともその時代から国の歴史のデータを蓄積するなんらかの機能があったということです。

我々は当たり前のように何年のどこで何が起きたのかを習ってきましたが、
それはソフトウェアとしてのデータベースがなかった時代から、脈々と受け継がれてきたものです。
すごいことですよね。

さて、初めてデータベースという単語が使われたのは、第二次世界大戦後、1950年代の米軍基地において
各基地に点在していたデータを、1箇所に集約した時であると言われています。

長らくデータを蓄積・保持してきた人類ですが、1960年代に入り、遂に ソフトウェアとしてのデータベース を発明します。

この時代では、IBMにより開発されたIMSと呼ばれる階層型モデルのデータベースと、
CODASYLの発表した関連ネットワークモデルのデータベースが人気のデータモデルでした。

f:id:zeals-engineer:20190720192253p:plain

階層型のデータベースはツリー型の構造で表され、現在で言う組織図のような構造になっていました。

1つのデータが1つ、もしくは複数のデータを子として持つことが許されていました。
そのため、「1対1」や「1対多」の関係を表現することができました。

しかし、このデータモデルはデータの冗長が発生しやすく、
例えば「多対1」を表現する時は、その子データは属する親データの数だけ存在する必要がありました。
また、エンジニアが階層型モデルでデータにアクセスするためには、その階層構造を理解している必要がありました。

その他に、階層型モデルを用いたプログラム開発は、プログラムが大きくデータ構造に依存してしまい、
保持・運用にかかるエンジニアの工数や必要とされる知識量が大きくなるという問題点を抱えていました。

一方、関連ネットワーク型のデータベースではデータは網の目の形で結ばれ、1つのデータが複数の親を持つことができるようになりました。
そのため、上記の冗長性の問題は解消されましたが、
階層型モデルの時の問題点であった、プログラムが大きくデータ構造に依存している問題は引き継がれ、
依然として保持・運用は難しい状況が続きました。

RDBの登場

そんな中、1970年にIBMのEdgar Frank "Ted" Codd(以下、コッド)が

"A Relational Model of Data for Large Shared Data Banks" https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf
という論文を発表しました。

これが現在にリレーショナルデータベースとして広く知られるデータモデルの基礎的な考えでした。

リレーショナルデータモデル(以下、関係データモデル)では、全てのデータをテーブルという二次元表で表現しました。
さらにそのテーブルでは、行や列という位置情報にデータが縛られないという革新性を持っていました。

関係データモデルでは、階層型モデル等のようプログラマに複雑な実装や高い専門性を求めず、
データベースを欲する全ての人々にその利用を解放しました。

しかし、これらの革新性にも関わらず、当時のIBMはリレーショナルデータベースを実装することを拒みます。

当時IBMが開発・販売していた、階層モデルのIMSによる収益を守るためです。
いわゆる、イノベーションのジレンマでしょうか。

ja.wikipedia.org

SQLの誕生

その間に他の会社や研究チームはコッドの発表した関係データモデルに大きな可能性を感じ、開発に着手します。

最初に開発に着手したのは1973年、UC BerkeleyのMichael Stonebrakerによるもので、このDBは"Ingres"と名付けられました。
Ingresは後に、"Post"(後の)+ "Ingres"から、"Postgres"へ、そして"PostgreSQL"へと名前を変えます。

f:id:zeals-engineer:20190721222943p:plain

1974年にはIBMも関係データモデル型のDBの開発を始めますが、
コッドをプロジェクトマネージャーに指名することはしませんでした。

代わりに指名されたのは、コッドの関係データモデルの理論を快く思っていないチームで、
この開発チームがコッドと関わりを持たないようにすることが目的だったとされています。

コッドは関係データモデルの論文を発表した翌年の1971年に、
RDBを扱うための言語として"ALPHA"という言語を発表しましたが、
このアイディアが実装されることはなく、代わりにアサインされた開発チームにより、"SEQUEL"という言語が作られました。

とは言え、これは元のシステムよりも優れていました。
1975年、IBMは試験的なRDBである"System R"を発表します。

この"SEQUEL"が後に"SQL"と呼ばれるようになります。

RDBの時代へ

1977年、コッドの論文を読み、RDBに可能性を感じたLarry Ellisonが商用RDBを開発するべく、会社を設立します。
これが後のOracle社です。

1979年にこの会社は、世界初の商用RDBである"Oracle Database"をリリースします。
最初はミニコンピュータ専用のDBであったOracle Databaseも、1983年にはIBMのPC上でも利用可能になりました。

Oracleはどんどん成長し、同年1983年にIBMもついに商用RDBを開発・販売しますが、
既にOracleのDBはIBMの顧客にも導入されており、市場はOracleに支配されていました。

f:id:zeals-engineer:20190721223343p:plain

(↑Oracleの本社)

その後短期間でRDBは次々に開発され、1989年にはPostgreSQLが、1995年にはMySQLが最初のリリースを迎えます。

MySQLはMySQL ABというスウェーデンの企業により維持されていましたが、
2008年にMySQL ABはサン・マイクロシステムズに買収され、2010年にはサン・マイクロシステムズがOracleに買収されたことで 現在はOracleが商標権を有しています。

また、コッドは1981年にチューリング賞を受賞するなど、多くの賞を受賞しました。
その後、独立してコンサルティングの会社を設立しますが、2003年に心不全で亡くなりました。

まとめ

いかがだったでしょうか。

  • RDBも考案された当初はすぐに実装されることはなく、その可能性を信じた外部の人間によって今のような普及に至ったこと
  • RDBもSQLもIBMから生まれたものの、それらは異なる開発者から生まれたこと

この辺りを知れたのは、面白かったなあ、と思います。

僕自身もRDB以前のDBのモデルを調べることで、勉強になりました!

他にも多くの切り口で技術の歴史を学びたいので、また機会があれば勉強しようと思います!
最後までお読み頂き、ありがとうございました。

参考文献

www.quickbase.com

www.techopedia.com

www.datasciencecentral.com

www.ibm.com

www.techscore.com

www.oracle.com

employment.en-japan.com

www.youtube.com