あらゆるITシステムの要(かなめ)といえるのが「データベース」です。エンジニアのみならず、企業システムに携わるビジネスパーソンにとって、その基礎知識の習得は不可欠です。新刊『データベースをなぜつくるのか』(矢沢久雄著)から、データベースの役割と必要な知識を抜粋・再編集して紹介します。第2回は「E-R図とSQL」について。

 データベースを使いこなすためには、「E-R図(イーアールず)」と「SQL(エスキューエル)」の知識は欠かせません。まずはこれらの概要を知っておきましょう。

E-R図とは?

 E-R図は、「エンティティ(entity=実体)」と「リレーションシップ(relationship=関連)」の「図(diagram)」という意味で、「ER図」や「ERD」と表記される場合もあります。E-R図は、データベース・システムの設計をするときに、データベース・システムの対象となる業務の内容を図示するために使われます。

 業務では、「氏名」や「住所」のような単独のデータが取り扱われることは、ほとんどありません。「氏名」と「住所」をまとめた「顧客」のようなデータが取り扱われます。これが、エンティティです。エンティティは、いくつかの単独のデータをまとめて名前を付けたものです。業務では、「顧客」は「商品」を「買う」のように、あるエンティティが他のエンティティと何らかの関連を持ちます。これが、リレーションシップです。

 業務の内容をエンティティとリレーションシップで図示するという技法は、1970年代に米国の計算機科学者であるピーター・チェン氏によって考案されました。

 図1.4に、E-R図の例を示します。E-R図の書き方には、いくつかの流儀があり、これはピーター・チェン氏の流儀です。四角形でエンティティを示し、四角形を結ぶ線とひし形でリレーションシップを示します。「N」と「N」は、顧客と商品のリレーションシップが「N対N(多対多)」であることを示しています。

画像のクリックで拡大表示
※本書の第2章から第5章で、E-R図の書き方と、E-R図を使ったデータベース・システムの設計の例を説明します。その際には、ピーター・チェン氏の流儀ではなく、よりよく使われているIE(第2章で説明します)と呼ばれる流儀を使います。

SQLとは?

 現在よく使われているDBMS製品には、オラクル社のOracle Database(オラクル・データベース)、マイクロソフト社のSQL Server(エスキューエル・サーバー)、IBM社のDb2(デービーツー)、およびオープンソースのMySQL(マイエスキューエル)、PostgreSQL(ポスグレスキューエル)、SQLite(エスキューライト)などがあります。これらのDBMS製品は、どれも「関係データベース(relational database)」という形式のデータベースを採用しています。

 関係データベースの「関係(relation)」とは、2次元のデータの集合のことであり、わかりやすく言えば表に格納されたデータです。関係データベースは、1970年代に米国の計算機科学者であるエドガー・コッド氏によって考案されました。

 データベース・システムの実装では、DBMSの機能を使ってデータベースを構築し、データを登録したり検索したりしてデータベースを利用します。その際に使われる言語がSQLです。SQLは、Structured Query Languageの略語であり、直訳すると「構造化された問い合せ言語」という意味です。データベースを利用するクライアントは、SQLを使って、サーバーにあるDBMSに「データを登録せよ」や「データを検索せよ」などの命令を与えます。つまり、DBMSに問い合せを行うのです。DBMSは、問い合せの結果を応答します(図1.5)。

画像のクリックで拡大表示

 プログラムを作るためにPythonやJavaなどのプログラミング言語があり、Webページを記述するためにHTML(HyperText Markup Language)という言語があるように、DBMSを使うためにSQLという言語があるのです。

 SQLの構文で記述された命令を「SQL文」と呼びます。SQL文は、基本的に「~せよ」を意味する1つの文で完結しています。プログラミング言語で記述されたプログラムのように、複数の命令文を書き並べることは、ほとんどありません。

 図1.6にSQL文の例を示します。SQLの構文は、基本的に英語の命令文と同じです。このSQL文は、「社員の情報を格納した表から(FROM Employee)、給与が30万円以上という条件で(WHERE salary >= 300000)、氏名と給与を検索せよ(SELECT name, salary)」という命令を表しています。セミコロン( ; )は、命令の末尾を示します。

画像のクリックで拡大表示
※本書の第6章から第10章で、SQLの構文と具体的なSQL文の例を説明します。DBMS製品の種類が違っても、SQLの命令や構文は、基本的に同じです。本書では、SQLiteというDBMS製品を使ってSQL文を実行しますが、本書で示すほとんどのSQL文は、他のDBMS製品でも、そのまま実行できます。

E-R図を学ぶ意義

 業務で使われるデータベース・システムの開発には、システムの開発者と利用者がいます。システムの開発者は、システム化の対象となる業務の内容を調べて、それをE-R図に書き表します。システムの利用者は、そのE-R図の内容を評価して、誤りがあれば指摘します。このように、E-R図は、システムの設計段階で、利用者と開発者が共通の認識を持つために使われるのです。そのためには、利用者と開発者の両方が、E-R図の知識を持っている必要があります。これが、E-R図を学ぶ意義です(図1.7)。

画像のクリックで拡大表示

SQLを学ぶ意義

 クライアントがSQL文で命令したことは、DBMSの機能として実行されます。データベースの操作は、大きく分けて「検索」「登録」「更新」「削除」です。これらは、SQLのSELECT、INSERT、UPDATE、DELETEという命令で実現されます。ただし、SQLには、これらの命令の他にも、データを集計するSUM、データを整列するORDER BY、データをグループ化するGROUP BY、表と表を結合するJOIN、データの更新を取り消すROLLBACKなど、数多くの命令があります。

 これらの命令を知ることを面倒だと思うかもしれませんが、そうではありません。知れば知るほど、クライアントは楽ができるのです。たとえば、もしSQLに検索結果のデータを整列する命令が用意されていなかったら、どうなるでしょう。クライアント側のアプリに、検索結果のデータを記述する機能を用意しなければなりません。これは、データを整列する命令を覚えることよりも、とても面倒なことです。

 SQLの基本的な知識があれば、開発者も利用者も、DBMSに何ができるかがわかります。これが、SQLを学ぶ意義です。さらに、開発者は、SQLの命令を数多く知ることで、アプリに用意する機能が少なくて済むので、開発のコストも少なくなります。これも、SQLを学ぶ意義です(図1.8)。

画像のクリックで拡大表示
(写真:Tee11/stock.adobe.com)
(写真:Tee11/stock.adobe.com)
画像のクリックで拡大表示
本書のテーマは、コンピュータ・システムで重要な役割を果たしている「データベース」。その基礎知識をイチから説明したうえで、データベースの設計で使われるE-R図と、データベースの実装で使われるSQLを詳しく説明します。Pythonを使って、データベースを利用するプログラムの作り方も示します。これらを知れば、データベースの仕組みが具体的にわかるだけでなく、その作り方も具体的にわかります。

矢沢久雄(著)、日経BP、2750円(税込み)