データベース
「データベース」とは、収集されたデータ(情報)を体系的に(=ある一定の規則に従って)コンピュータに蓄積し、検索・抽出などの再利用をできるようにしたものです。ここでは、その「データベース」について見ていきます。
データベースの種類
データベースに大きく分けて次の3種類があります。
・「階層型データベース」:初期のデータベースで採用されていた形式で、データのつながりを階層的に表現します。
以下のような家系図のようなイメージのデータ構造です。
・「ネットワーク型データベース」:「階層型データベース」を発展させたものです。「階層型データベース」では、子ノードは複数の親ノードを持つことができませんでした。家系図の例で言えば、「父」は本来「祖父」と「祖母」につながる必要があります。しかし、複数の親ノードを持てないことから、上の例では「祖父」だけを表記していました。よって、「ネットワーク型データベース」では、複数の親ノードを持つことに可能にし、以下のような網目状のデータ構造を持てるようになりました。
しかしながら、この「ネットワーク型データベース」においても、データの登録・削除のたびにデータへのアクセスルートが変わるという特徴があるため、階層型と同様にデータを利用する際には常にデータ構造を意識する必要があり使いづらい側面があります。それを克服し、現在最も使用されているデータベースが以下になります。
・「リレーショナル(関係)型データベース」:このデータベースは、基本的に「表」です。つまり、行と列の2次元でデータを保持するデータ構造です。以下に詳しくみていきます。
リレーショナル(関係)型データベース
実際の「リレーショナル(関係)型データベース」について、見ていきます。
例として、ある小売店が販売管理でデータベースを使用しているものとします。
まず、顧客についてのデータベース(「顧客マスタ」などと呼ばれます)は次のような感じになります。
この表は、その名の通り「テーブル」と呼ばれます。そのうち、行の部分を「レコード」と呼び(記録ですね)、列の部分を「フィールド」と呼びます。
ここでは、1つの「レコード」に対して、6つの「フィールド」で顧客情報が保持されています。
まず、大事なのは「顧客コード」の「フィールド」です。これは「主キー」と呼ばれるもので、各データを一意に識別するために必要なものです。例えば、氏名は同姓同名が存在する可能性があり、「主キー」にはなり得ません。もちろん、「住所」、「性別」、「年齢」も同様に重複する可能性がありますね。「電話番号」は「主キー」になり得そうですが、家族が家の固定電話で登録する際には、やはり重複が発生しますのでダメですね。よって、多くの場合、通し番号や何か重複しないことが保証されたコードなどが「主キー」として割り当てられます。
次に、販売実績に対して作られるデータベース(「販売マスタ」などと呼ばれる)を見てみます。
ここでの、「主キー」は取引コードです。また、大事なのは先の「顧客マスタ」の「主キー」であった、「顧客コード」がフィールドに現れていることです。ここで、「顧客マスタ」と「販売マスタ」の間に関係(リレーションシップ)が存在する訳ですね。
以上のように、リレーショナルデータベースでは複数のテーブルを持つことが一般的です。
リレーショナルデータベースの操作
さて、上で説明したように、リレーショナルデータベースでは複数のテーブルを持つことが一般的です。しかし、我々人間がデータベースの中から知りたい情報を得ようとした場合、例えば「2024/9/5 の取引の顧客は誰だったかな?」と思ったとして「取引マスタ」を見ても「顧客番号 003と001の方です」としか分かりません。これは不便ですよね。よって、リレーショナルデータベースでは以下の操作が可能であり情報を分かりやすい形にすることができます。
「結合」:複数のテーブルを共通する項目で結びつけ、一つの表にして表示する
「選択」:与えた条件に合うレコード(行)を取り出して表として表示する
「射影」:テーブルの中から、一部のフィールド(列)を抽出して表として表示する
例えば、先の「取引マスタ」に対して、2024/9/5 のみの販売に対して(「選択」)、
「顧客コード」を元に、「顧客マスタ」と結びつけ(「結合」)、
「取引コード」、「販売日」、「氏名」だけを表示する(「射影」)と以下のようになりますね。
以上のような操作や、さらにはテーブルの作成や記録は、「データベース管理システム(DBMS:Data Base Management System)」で行われます。
特に、リレーショナルデータベースにおいては、Relation の Rを付けて、「RDBMS」と呼ばれます。
さらに、その操作の際に使用される言語を「SQL」といいます。