ホームやさしいIT研究室

システムを支えるデータベースとは?筑波大...

システムを支えるデータベースとは?筑波大学「データーベース概論Ⅰ」(後編)

はじめに


世の中にアプリやシステムが普及し、どんどん便利な社会になっています。
システムと聞くとアプリアイコンや画面表示など、UI的な分かりやすい外見に目が行きがちです。

しかし、システムにはログやユーザーデータが格納され、適切に管理していくことでその真価を発揮し、ユーザーにとって最適なパフォーマンスを可能にします。
目に見えない部分ですが、バックエンドとなる裏側のデータ管理は非常に重要な役割を担っているわけです。では、そのデータ管理を担っている「データベース(DB)」とは一体どのようなものでしょうか。

今回は、2018年にYouTubeで公開されている筑波大学の講義「データベース概論Ⅰ」を視聴しましたので、簡単に概要をまとめてみました。
全15講義分の要約でかなりにボリュームになったため、前後半の2つの記事に分けました。どちらもお楽しみください。

本記事では、ITパスポートレベルのITに関する基本的な概念や用語の説明を割愛しています。
分からない単語があれば参考サイトのIT用語辞典がすごく便利なので活用してください。
また、記事内でのデータベースとは主に「リレーショナルデータベース(RDB)」を指します。

データベースの演算子


データベースに対して基本的な操作を行うための数学的な枠組みをリレーショナル代数と言います。

この考え方を利用し、データベースに格納されたデータに対して様々なアクションを可能とします。
リレーショナル代数の代表的な演算子には以下のようなものがあります。これらの演算をSQLを通して実行するイメージです。

2つの表に存在する全ての行を重複がないように抽出

一方の表からもう一方の表に存在する行を取り除く

直積

2つの表に存在する全ての行の組合せ

射影

指定の列を重複がないように抽出

選択

特定の条件にあった行を抽出

結合

2つの表で一致する属性値に基づき行を結びつける
(直積×選択)

組合せの中から条件にあった列を抽出
(直積×選択×射影)

SQLとは何か


SQLは、データベースに対してユーザーが「どんなデータが欲しいか」を伝えるために使用する言語です。

あくまでユーザーは「どんなデータが欲しいか」を定義するだけで、「どんな手順で実行するか」はデータベースが自動で最適な方法を決めてくれます。
そのため、この演算子とこの演算子を組み合わせて、この手順で実行してくれというような細かい指示を考える必要はありません。

SQLには主に以下の機能があります。

データ定義

テーブルや主キー等を扱いデータベースを定義するコマンド

データ操作

データに対して選択/挿入/削除等を実行するコマンド

データ制御

データベースへのアクセス権限を定義するコマンド

トランザクション制御

データベースの実行単位であるトランザクションを制御するコマンド

SQLの書き方


SQLは国際標準化されているため、一般的なMySQLやPostgreSQL等のDBMSにおいて、独自の拡張や機能があったりしますが、基本的な書き方は統一されています

SQLの書き方①

SQLで頻繁に登場するSELECT句/FROM句/WHERE句は、
書き方はSELECT→FROM→WHEREの順番ですが、
読み方としてはFROM→WHERE→SELECTの順番が理解し易いのでおすすめです。

SQLの書き方②

また、SELECT句には関数を指定できます。
COUNT/SUM/NOW/IF等のExcelでもおなじみの関数が用意されており、取得できるデータについてもExcelの関数とほとんど同じと考えて良いでしょう。

問い合わせ処理の最適化


DBMSは非常に賢く、SQLを効率よく実行できるように自動で最適化してくれます。
複数の選択肢の中から、最も効率的にデータを取得する方法を勝手に選んでくれるわけです。

問い合わせ処理の最適化

最適化の一例として、DBMSは問い合わせを処理する際に、早い段階でデータ量を減らせる方法を優先します。
WHERE句や射影等のフィルタリングがある場合、先に実施しておいた方が以降で取り扱うレコード数が減る可能性が高くなります。
これにより、処理すべきデータ量が少なくなり、その後の処理負荷を軽減できます。

ファイルの編成方法


データベースで効率的なデータ管理を実現するためには、どのようにレコードを格納するかを決めることが重要です。

DBMSはその編成方法に基づいて、問い合わせ処理の最適化を行います。
そのため、ユーザーが直接意識することはない領域ですが、設計の段階において非常に重要な要素です。

主なファイルの編成方法には、以下のようなものがあります。

ヒープファイル

挿入は速いが、検索は非効率

ハッシュファイル

検索が高速だが、範囲検索は苦手

順次ファイル

並び替え済みなので範囲検索が得意だが、挿入や削除に時間がかかる

索引付ファイル

索引により検索が高速化されるが、索引管理が必要

B木/B+木

ツリー構造により効率的な検索・挿入・削除が可能。特にB+木は範囲検索が得意

主索引と二次索引

主索引で一意な検索を効率化し、二次索引で柔軟な検索が可能

さいごに


今回の説明では、データベースに保存されたデータへのアクセス方法や、理想的なデータ管理について解説しました。
前回の記事と合わせて、データベースとは何なのか概要は掴めたんじゃないでしょうか。

システムを構築する上で、データの存在は欠かせません。
データベースを使用しないシステムにおいても、データを効率的に管理するにあたって、これらの知見は決して無駄にならないと思います。

久しぶりの大学の講義を1学期分視聴したので、なんだか学生に戻ったみたいでした。
社会に出てみると、大学の先生のように特定の専門分野に精通した方に出会う機会は意外と少ないです。

いま学生の皆さんは、ゼミや研究室といった専門家と近い距離で交流できる貴重な場があると思います。
そこで得た専門的な知識や経験は、社会でも大いに通用しますので、是非活用してみてください。

参考サイト