トランザクションデータとマスターデータと区別して保存するする必要性を 理解することが重要である.
ネットショッピングのデータベースを例に考える. 顧客にIDがふってあるあるとして,あるIDの顧客の住所 のデータは基本的に固定である.一方そのIDの顧客が どの商品を何個買ったか,という情報は購入行為ごとに 変わる.
購入行為ごとに発生する伝票に顧客の住所など全ての情報を記入していると
という問題がおこる.そのため購入行為ごとに発生する「購入した商品ID」, 「個数」などのデータと,購入行為に連動しない「顧客の住所」などの 基礎データとをわけて保存し,必要なときに連携して処理を行う. 購入行為ごとに発生するデータをトランザクションデータ, 購入行為に連動しない基礎データをマスターデータという.
トランザクションデータとマスターデータはデータベースに 別々の「テーブル」として保存される.
「エンティティ」とは,教科書P125図11.1でいうと
「顧客」エンティティは「顧客名」「住所」「電話番号」を 項目としてもつ,
というところまでを定義した概念である. どんなデータをもつかの定義であって実際のデータではないことに 注意する.実際のデータは「インスタンス」とよばれ, 教科書図11.1では「青木商事,東京都中央区,03-123-4567」 が顧客エンティティの一つのインスタンスであり, 「石田電気,大阪市北区,06-987-6543」は また別のインスタンスである.
一つのエンティティにたいして一般に複数のインスタンスを 行として記録されている教科書図11.1の構造のものを 表,またはテーブルという. テーブルはデータベースの要素として最も基本的なものである.
教科書で「データ項目」とよんでいるのは表から縦の列を とりだしたものである.例えば教科書図11.1の一番左の列
顧客名 |
---|
青木商事 |
石田電気 |
が教科書表11.1のデータ項目の例である.
この節で「ファイル」とよんでいるのは一般に「テーブル」 とよばれているものである.テーブルをコンピュータに 保存するときはファイルとして保存されるので,そのイメージで 書いていると考えられる.ここでは「テーブル」,「表」, 「ファイル」は同じものと考えてよい.
複数のテーブルの集合がデータベースである. 教科書P126の図11.2がデータベースの例である.
エンティティ,インスタンス,レコード,テーブル,データベースの 用語を教科書図11.1に当てはめて説明する.このデータベースには エンティティが以下の3つある.
11.2 A 節でエンティティを説明するものとしてデータが発生する と書かれている,一般的にはエンティティに大してインスタンスと呼ばれるもので 顧客ファイルのエンティティには
という2件のインスタンスが記録されている.データベースでは これらそれぞれをレコードという.テーブルの具体的なデータを 行(横方向のならび)で切り出したものがレコードである.
エンティティにいくつか具体的なインスタンスをレコードとして 記録したものがテーブルである.例えば教科書図11.2には
顧客ファイル | |
---|---|
顧客番号 | 顧客名 |
K01 | 青島電気 |
K02 | 石山商事 |
商品ファイル | ||
---|---|---|
商品番号 | 商品名 | 単価 |
S1 | テレビ | 50000 |
S2 | コンポ | 60000 |
S3 | DVD | 70000 |
売り上げファイル | ||
---|---|---|
顧客番号 | 商品番号 | 数量 |
K01 | S1 | 3 |
K01 | S2 | 1 |
K02 | S1 | 2 |
の3個のテーブル(表,ファイル)がある.業務ではこれらを組み合わせて 使うのでこれらのテーブルの集合がデータベースである.
テーブルを核にして理解するのがコツである.テーブルを複数組み合わせたものが データベース,逆にテーブル内を細分化して観察すると,どんな項目 がそのテーブルにかけるかという情報がエンティティで,具体的な データの行(横方向)を切り出したものがレコードである.
これらの 3 つのテーブルのうち,売り上げファイルは 購入行為ごとに追加されるのでトランザクションデータである. それに大して顧客ファイル,商品ファイルは 購入行為ごとに変更されず,内容が維持される性質のものであるから マスターデータといえる.顧客情報などを1つのテーブルに まとめておくことで,顧客情報の変更が起こったときに あるテーブルの情報は更新できたが別のテーブルの情報の 更新を忘れた,というようなことが起きない.これが マスターデータとトランザクションデータを別のテーブルで 保存する目的である.
レコード,ファイル(テーブル)の説明は前節で行った.
レコード内の要素をフィールドという.この教科書では データ項目とフィールドを同じ意味で使っていて,教科書p.127図11.3 のようにテーブルを列(縦方向)で切り出したものを データ項目といったり,あるレコードの要素一つをフィールドと いったりしている.
主キーはデータの探索に用いられるデータ項目で,全ての レコードに固有の重複しない値が与えられなければならない.
データベースは複数のテーブルで構成されることはすでに説明した. 例えば売り上げファイルを見てどの顧客にいくら請求すれば良いか 知る,という業務を考える.これは3つのテーブルを顧客番号,商品番号 で関係性を調べて組み合わせて処理しなければいけない. このように複数のテーブルから構成され,それら関係性により データを処理するデータベースを 関係データベースという.
テーブルは行列で表される.行がレコードに, 列がデータ項目(フィールド)に対応する.
テーブルとテーブルの関係性を使って処理を行うには それぞれのテーブルに同じデータ項目をもたせることで 行われる.例えば教科書p.128図11.5の2つのテーブルで 顧客番号K02の買った商品の商品名,請求価格を知りたいとすると, 売り上げファイルの最後の列から商品番号がS1であることを 手掛かりに商品ファイルで商品名がテレビ, 単価が50,000円であることを検索し, 数量が2個であることから請求金額が100,000円であることがわかる.
一般的には売り上げファイルを構成するときは 一件の売り上げごとに一意の売り上げIDを付与し,それを 主キーとする.
射影はテーブルからいくつかの列 を取り出すこと, 選択はテーブルからいくつかの行 を取り出すことに相当する.結合 は複数のテーブルにある情報を共通のデータ項目で結びつけて それぞれのテーブルにある情報が書かれた表に合成する操作である. 教科書p.129図11.6がわかりやすいのでよく確認すること.
関係データベースでは 始めから教科書図11.6(c)のように売り上げデータに単価などを 書き込んだテーブルを作るのではなく,商品データ,顧客データ などを独立したテーブルで保存しておいて必要なときに 組み合わせた表を生成する.単価の改定や 顧客の電話番号が変わったときなどに整合性が とれることが利点である.
データベースは高機能で複雑なソフトウェアなのでデータベース管理システム と呼ばれるソフトウェアを介して操作するのが一般的である.
ユーザーはデータベース管理システムに対して決められたフォーマット で命令を入力することでデータベースの操作を行う.
データベース管理システムの重要な役割の一つにトランザクション管理 がある.
トランザクションとはデータ処理一件が始まってから完了するまで のことで,一般にデータベースは複数のユーザーから同時にアクセスされ 複数のトランザクションが色々なタイミングで発生し,終了する. このときに重要なのが排他制御である.
教科書p.131図11.7が排他制御に失敗した例である. 左の入庫処理と右の出庫処理が別のユーザーからほぼ同時に 行われたとする.この例では
の順で起こっている.この場合,3. で在庫量が増える前に 2.で在庫量を読み出してしまっているので入庫処理の結果 が反映されず,間違った在庫量になってしまう.
これを防ぐためには左の入庫処理のトランザクションが 終了するまで右の出庫処理のデータベースへのアクセスを 禁止し,待つように指示すればよい.これを 排他制御という.こうすると,
の順に事象が発生し,正しく処理される.データベース管理システムは 排他制御を自動的に行うのでユーザーはこのような問題を意識する 必要が無い利点がある.