データベーススペシャリストが教える正規化のメリット

初めまして、今年4月に新卒で入社した栁と申します。

今回初の記事投稿です!どうぞよろしくお願いいたします。

さて、いきなり自慢話で恐縮ですが、、、私は学生時代に資格の取得に力を入れたため、経済産業省が認定する国家資格「情報処理技術者試験」の高度区分を4つ(DB、NW、ES、SC)所持しています(2020年11月現在)。

いずれも合格率が10%台の難関資格です。

今日はそれらの資格の中でも、最初に取得したデータベーススペシャリストより「正規化」についてお話しします。

目次

  1. 正規化とは
  2. 正規化のメリット
  3. おわりに

1. 正規化とは

まず「正規化」とは何かご説明します。

正規化は、RDB(リレーショナルデータベース)において、データの保管のルールを最適化することを言います。

では、RDBとは、、、?

現在様々なシステムに利用されているデータベースは、主に2種類に分けられます。

一つはRDB、もう一つはNoSQLと呼ばれます。

RDBは2次元の表形式でデータを保存し、古くから使われていることもあって、現在のデータベースの主流となっています。一方で階層構造のデータを保持することが困難であったり、大量のデータを素早く処理するということを苦手としています。

NoSQLは比較的最近出てきた方式で、キーバリュー型やドキュメント型など、多様なデータ構造をサポートしており、高性能、高速である一方整合性を犠牲にしています。

最近では結果整合性の考え方を取り入れるなどして、ACID特性を備えたNoSQLもありますが、根本的にRDBで可能なテーブル結合がサポートされていないなどの理由から、経理システムや、受注管理システムでは現在でもRDBが好まれて使われています。

一方でRDBはその設計により、検索速度に大きな差が出てしまうため、どうすればより早くデータを処理できるかということを常に意識しなければなりません。

そこで必要となるのが、正規化です。

つづいて、正規化のメリットについて解説していきます。


2. 正規化の重要性

RDBにおいて多用されるテーブル結合は、異なるテーブル間を跨いで検索を行うことができるため、一般にNoSQLよりも高度な検索を行えます。一方で、テーブル結合を繰り返すと、データ量に比例して検索速度が遅くなります。

少し誤解を与えてしまう可能性もありますが、正規化の作業を「本をしまうこと」を例に説明しますね。

本を適当に積み重ねるよりも、巻数順、タイトル順、著者名順などに並べたり、カテゴリごとや出版社ごとに分けたりして保管した方が、読みたい本を簡単に探せますよね?

私は結構面倒くさがりなので、ついつい本を床に積み上げてしまうのですが、読みたい本が高く積みあがったタワーの一番下にあったときの絶望感ときたら、それだけで本を読む気力を失います。

せっかく便利な本棚(データベース)というものがあるのですから、きれいに並べて(正規化)、目的の本を素早く取り出せるようにした方が、効率的ですよね?


ここからは少し技術者向けになりますが、正規化をするとテーブル検索の際、主キーによる検索を多用するようになります。

主キーは、テーブル内で一意ですから、該当レコードが見つかった時点で、RDBMSは検索を終えることができます。

正規化されていなければ、該当データが見つかっても最後まで走査するということがしばしば起こります。目的の本を見つけたのに、本棚の隅々まで本を確認するのがいかに無駄な行為かは言うまでもないでしょう。

一方で、正規化をするとテーブル結合の回数が増えたり、導出項目の計算(生年月日から年齢を計算する等)などで、逆に処理が遅くなる、といった声も聞かれます。

確かにそのような例もなきにしもあらずですが、多くのデータベースでは、検索コストの増大によるデメリットを被っている方が多いです。

参考までに、以下の記事で行われた実験では500万件の受注データの処理に、正規化していないテーブルでは検索に14秒かかっている一方で、正規化しているものは90ミリ秒という単位で処理できています。

(参考)「DBを正規化すると遅くなる」は誤解,実証験の結果が公開に

また、実際に業務の中では、ウェブサーバのリソースが余っているのに、DBサーバがボトルネックになっている例を見かけます。

正規化して導出項目の計算をWebサーバの役目とすれば、負荷分散によりシステム全体として、処理速度の向上が見込めるはずです。

Webサーバやアプリケーションサーバは比較的簡単にスケールアップできますが、DBサーバはデータの移行が煩雑であったり、データ損失のデメリットを考慮して更新されないことが多々あります。現在のアプリケーションサーバはかなり高性能になっているため、導出項目の計算程度で処理速度が落ちる例は稀です。正規化の理想形に近づけてRDBのパフォーマンスを最大限引き出していただければと思います。


3. おわりに

私が専門学校に通っていたとき、周りの学生からは

「正規化は難しい」

「やるメリットが分からない」

といった声がちらほらと聞こえてきました。

確かに正規化は難解な言葉が多く、とっつきにくく感じるかもしれませんが、その技術を自分のものとすれば、データベースに携わるエンジニアとして、間違いなく大きなアドバンテージになると思います。十数秒かかったクエリがミリ秒単位の処理時間になるだけで、使用者のストレスは大きく軽減されます。

是非、データベーススペシャリストに挑戦してみください。

(私が使用した参考書)

翔泳社 三好 康之 著 情報処理教科書 データベーススペシャリスト 2020年版

関連記事

プロジェクトストーリー

技術

コメント

この記事へのコメントはありません。

カテゴリー

TOP
TOP