データベースによるデータの持ち方は,通常のファイルと比較してどのような利点があるかを理解します。
これらはかなり抽象的な高度な概念ですので,厳密に詳細にわたることは避けて,その概要を理解するにとどめます。
プログラムからの独立,ファイルデザイン,冗長性の排除,排他制御,同時更新,ロック機能,機密保護,障害回復,インデクス,B-tree,ビットマップ,更新処理,検索処理,OLAP
過去問題:「排他制御」( haita-seigyo.), 「バックアップとリカバリ」( backup-recovery)
通常のファイルは下図のような形式になっています。ファイルに入っているものはデータだけであり,「月日」や「得意先コード」などの項目名はファイルには含まれていません。さらに,物理的にはファイルの中では,項目間の区切りやレコードとレコードの間の区切りもありません。しかも,実際にはバイナリ表示になっているので,これよりさらに複雑になっています(図示)。
1001500コダマ電器101目立テレビ10テレビ10401001500コダマ電器205HALパソコン20パソコン202001001500コダマ電器326松川ケータイ30ケータイ10101004600リラックス213MDBパソコン20パソコン30180・・・・
それで,プログラムでどこからどこまでを何という項目名で取扱うのかを定義する必要があります。すなわち、プログラマは利用するファイルの詳細を知る必要があったのです(COBOLでのファイル定義例)。
下はCOBOL言語でのファイル定義文ですが,プログラマは個々のプログラムでこのような定義をしなければならなかったのです。
FD 売上ファイル.
01 売上レコード.
02 月日 PICTURE 9(4).
02 得意先コード PICTURE 9(3).
02 得意先名 PICTURE N(5).
02 商品コード PICTURE 9(3).
02 商品名 PICTURE N(7).
02 商品区分コード PICTURE 9(2).
02 商品区分名 PICTURE N(4).
02 個数 PICTURE S9(3) COMPUTATIONAL.
02 金額 PICTURE S9(9) COMPUTATIONAL.
それに対して、データベースをアクセスするにはSQL言語が用いられますが,それでは下図のような記述ができます。
SELECT 得意先名,商品名,数量
FROM 売上ファイル
WHERE 月日="1001";
ここでは,「得意先名」や「商品名」「数量」などの項目名はDBMS(データベース管理システム)で定義されているので,プログラマはファイルデザインを知る必要はないのです。
通常のファイルでは、個々のプログラムでファイルデザインを定義しているので、ファイルに新規の項目が追加された、既存項目の桁数が変更になったなど、ファイルデザインが変化したら、そのファイルを用いているプログラムをすべて変更しなければなりません。
それに対して、個々のプログラムでは,そこで必要とする項目名だけを使っているのですから,後になってファイルデザインが変更になっても,プログラムを修正する必要はありません。すなわち,データベースでのデータをプログラムから独立して管理できるのです。
これは,データを部品と考えることでもあります。すなわち,データベースとはデータを部品として再利用することを目的としているともいえます。
データベースにするにあたり,データの正規化をすることが必要になります。正規化すると,全体としてのデータ量が少なくなり,ディスクなどの記憶装置のコストを少なくすることができます。
それだけでなく,一つの項目は一つの場所にしか存在しなくなるので,データの管理が容易になります。たとえば,得意先名が多くのファイルに存在するとき,その名称が変更になったとしたら,どのファイルに該当する得意先があるのかを調べて,それを間違いなく修正しなければならなりません。これは大変な作業になるし,修正もれを完全になくすことは困難です。それに対して,正規化されていれば,得意先名は得意先マスタにしか存在しないので,得意先マスタを修正するだけで,すべてのシステムについて,間違いなく修正できたことになります。
売上処理は担当者が多いので、売上ファイルを複数の人が同時に更新することがあります。それを同時更新といいます。同時更新が発生するファイルでは、データの一貫性(インテグリティ)を維持するために、ある人が更新をかけている場合、その処理が完了するまで、該当するファイルに他の人が更新をかけないようにロックをかけておき、他の人からの更新処理を待たせておく必要があります。この機能を排他制御といいます。
DBMSでは、ファイル全体にロックをかけるのか、該当するデータにだけロックするのかなど、ロックの粒度を指定したり、ロックの解除、待っている処理の自動再開など、排他制御を効率よく行うための機能をもっています。
→詳細:「排他制御」
データベースに蓄えられているデータのなかには,特定の人以外には秘密にするべきデータもあります。通常のファイルでもファイル単位にユーザIDやパスワードにより,
読み書き両方ができる
読むことはできるが書くこと(更新)はできない
読み書き両方ともできない
に分けてアクセス制御することができますが,さらにデータベースでは,DBMSが独自に
列(項目)単位,行(レコード)単位でのアクセス制御できる
アクセス資格を多様なグループ分けにして指定できる
など,きめの細かい機密保護ができるようになっています。
万一のトラブルによりデータの整合性を失ったとき,データベースを回復する機能があります。データベースを更新するとき,更新件数や時間などによりチェックポイントを設定しておき,チェックポイントになると,次のチェックポイントに達するまで,更新前と更新後の情報をログというファイルに記録しておき、チェックポイント間でトラブルが発生したときは,ログファイルを用いてデータベースの内容を直前のチェックポイントの状態に回復するのです。
→詳細:「バックアップとリカバリー」
通常の事務処理では、データの更新や照合など、データをあるキーで検索する処理が多発します。その処理を効率化するためには、データにインデクスという検索用の索引をつけておくことがあります。通常のファイルでも乱編成ファイルや索引つきファイルなどがありますが、データベースではDBMSがインデクスを管理しており、項目ごとに多様なインデクスがつけられるようになっています。
→詳細:「ファイル編成}、「インデクス」