第6章 データベース

企業活動において、コンピュータの利用が多くなってくると、そこで扱われるデータ量も増大してくる。

例えば、インターネット上のショッピングモール楽天では

2010年現在:店舗数:31,985店舗、商品数:55,694,991点、会員数:6,200万人

2020年11月現在:店舗数:52,208テンポ、商品数:277,852,273点

となっています。

これに対して、表計算ソフトでは、

エクセル2003の最大レコード数:65,000件

エクセル2016 最大1,048,576行16,386列

となり、エクセルで全店舗の商品管理(在庫の変更、値段の変更など)や会員管理(新規登録、住所変更等)をすることは不可能であったり、可能であってもとても効率の悪いものになってきます。

例えば、

全店舗の商品管理:仮に1店舗当たり100点の商品として、データ数:           

顧客管理:全会員の管理、データ数:           

注文管理:全会員が10回注文を出した時のデータ数:           

このような、大量のデータを効率的に扱えるようにしたのが、データベースです。

現在企業で多く利用されているデータベースには、次のようなものがあります。

超小規模:Microsoft社 ACCESS -> 仕様

小規模以上

オラクル

Microsoft SQL Server

Azure上のデーターベース

関連する資格

オラクル オラクルマスター

マイクロソフト Azure Database Administrator Associate

情報処理技術者試験 データベーススペシャリスト試験

データベース

関連性のあるデータを一定の目的にしたがって大量に蓄積したもの。一般的には、コンピュータによって蓄積管理されているデータファイル郡を指し、その構造によってオブジェクト指向型、階層型、関係(リレーショナル)型、ネットワーク(網)型、分散型などの種類がある。

いろいろなデータベース

電話機の電話帳、電話番号案内、預貯金、宅配便追跡調査、レンタルビデオ会員、検索エンジン、、、
学内情報システムの学生情報、教職員情報

データベースの必要性

個別アプリケーションのファイルを使ったシステムでは、適応業務ごとにファイルが作られる。
このため、

といった欠点がある。

ファイルの欠点を解決する方法がデータベースである。関連するデータをまとめて体系的、構造的に一元管理し、プログラムから独立させ、多くの利用者が使える共同ファイルとしたものである。

[例] 販売部

注文を処理する業務で顧客のデータを使用する。

商品発送を処理する業務で顧客のデータを使用する。

請求書等を印刷する業務で顧客のデータを使用する。

資料案内を送付するための業務で顧客のデータを使用する。

データベースを使用しないとそれぞれの業務で独自の顧客データを所有する事になる。

独自のデータを持つことによる不都合には、どんな事が考えられるか?

1. データの重複による無駄:異なる適応業務で、同じ項目のデータを所有してしまう。

簡単な例:簡単なエクセルデータ650,000件⇒約13MB。楽天の会員⇒1.3GB

2. データ間の不整合性:重複したデータが、同時に更新されず新旧のデータが存在してしまう。

個別の店舗でデータを持っていると、会員が引越しをしたとき、更新されている店舗と更新されていない店舗が存在してしまう。

3. ファイルの統合の困難:各適応業務で使用する項目やデータ形式が異なるため、個別のファイルでは統合が困難である。

A店舗では、店舗への登録順に、顧客番号を1,2,3,…
B店舗では、店舗への登録順に、顧客番号を0001,0002,0003,…
C店舗では、店舗への登録順に、顧客番号をk0000001,k000002,k0000003,…
D店舗では、店舗への登録順に、顧客番号をko1,ko2,ko3,…

ショッピングモールでの売り上げに応じたポイントを付加しようとしても、会員情報がばらばらで、統合できない。

4. データ安全性の確保の困難:各適応業務が使用するプログラムで、各々のファイルの機密を制御しなければならない。

社員全員がデータに参照できる → アルバイトと係長が同じデータを扱える。
パスワードを用いて各適応業務に従属する人員が参照できる → アクセスする人に応じた閲覧可能なデータ構成にする。

[データ量の増大に関する問題]

5. データの信頼性の向上:個々のプログラムがありえないデータのチェックを行なわなくてはならない。

未来に生まれている人、数〜数十世紀に渡り生きている人
1桁の電話番号、郵便番号

6. 補助記憶装置の効率的利用:個々のプログラムが対応しなければならない。

データの保存など

7. データの書き込み、読み出しの高速化:個々のプログラムが対応しなければならない。

 

各プログラム独自のデータでは、これらの問題を個々のプログラムが解決しなければならず、その実現には困難を要する。

以上のような問題を解決するため、データの管理をDBMS(Data Base Management System)と呼ばれるデータ管理専用のプログラムで行うことがデータベースの考え方。

データベースを導入するには、そのための費用とデータベースを維持する人間が必要となる

1.データベースの構造

木構造:

データベース中のレコード間の関係が階層型になっているデータベース。
[大学]の下に[学部]があり、その下に[コース]があり、その中に[学生]が属している。

網構造:

レコード同士が網の目のように結びついたデータベース。

関係型構造:

関連するデータを行(レコード)と列(項目)に分けた2次元の表で管理するデータベース。
各表では、繰り返しの生じない項目数(必要最小限の項目)から構成されており(正規化)、関係演算をすることで、いろいろなデータを検索することができる。

関係演算には、
選択、 射影、 結合
がある。

正規化:表を必要最小限の項目で構成する。
関連する情報を一つの表とした場合、データの重複が生じたり、データ更新時の更新数が多くなり、効率が悪くなる。

例えば、以下のようなデータがあったとき履修授業は長さがばらばらで繰り返しになっている。と

学籍番号 氏名 出身地 履修授業1 授業1成績 履修授業2 授業2成績 履修授業3 授業3成績  
g121a001 宮古鮭雄 宮古市 授業A   授業B        
g121a002 盛岡冷 盛岡市 授業A            
g121a003 花巻牧子 花巻市 授業B   授業C        

これらを正規化すると、以下の学生個人に関するデータ、授業に関連するデータ、履修状況(成績を含む)3つの表に整理することが出来ます。

2.データベースの管理システム

DBS(Data Base System)では、DBM(Data Base Manager)と呼ばれるプログラムがデータベースへのアクセスや管理などを総括して行う

[例]

学生の実体には、学籍番号、名前、住所、電話番号、保証人の名前、保証人の住所、保証人の職業、保証人の年収、生年月日、血液型、、、などの属性があり、データベースに登録されている。

学生生活担当の教員は、全てのデータを参照できる。

普通の教員は、学籍番号、名前のみを参照できる。

学生生活担当の職員は、全てのデータを参照できる。

普通の職員は、学籍番号、名前、住所、電話番号、保証人の名前、保証人の住所、保証人の職業、生年月日参照できる。

アルバイトの職員は、学籍番号、名前、住所、電話番号、保証人の名前、保証人の住所のみを参照できる。

3.データベース言語(SQL)

CREATE:データベースの構造を指定する命令
GRANT:データベースのアクセスの優先度を指定する命令

INSERT:表にデータを入れる命令

DELETE:表からデータを削除する命令

SELECT:表から読み出す命令

UPDATE:表のデータを変更する命令

実際にSQLを使用して、データベースを作成し、操作をしてみる。

1. Table 1,2,3の作成

CREATE TABLE 学生リスト (学籍番号 char(5), 氏名 char(20), 学部コード char(2), 住所 char(100), 出身校コード char(3));

CREATE TABLE 授業リスト (授業コード char(3), 授業名 char(20), 学期 int, 教員コード char(3));

CREATE TABLE 履修リスト (学籍番号 char(5), 授業コード char(3), 得点 int);

2. Table 1,2,3へのデータの入力

INSERT INTO 学生リスト VALUES ('99001','岩手太郎','01','岩手県宮古市××','001');
INSERT INTO 学生リスト VALUES ('99002','宮古一郎','01','岩手県宮古市○○','001');
INSERT INTO 学生リスト VALUES ('99003','盛岡次郎','01','岩手県盛岡市○○','002');

INSERT INTO 授業リスト VALUES ('001','経営情報システム論',2,'120');
INSERT INTO 授業リスト VALUES ('002','OA論',1,'120');
INSERT INTO 授業リスト VALUES ('003','生産管理論',2,'120');

INSERT INTO 履修リスト VALUES ('99001','001',80);
INSERT INTO 履修リスト VALUES ('99001','002',85);
INSERT INTO 履修リスト VALUES ('99002','001',75);
INSERT INTO 履修リスト VALUES ('99003','001',65);

3. データの検索表示(無条件、条件)

全履修リストの表示:テーブルのすべてのデータの表示

SELECT * FROM 履修リスト;

履修リストの学籍番号、得点の表示:テーブル中の特定の項目だけの表示(射影

SELECT 学籍番号, 得点 FROM 履修リスト;

履修リストで授業コード001を履修かつ80点以上の全ての項目を表示(選択)

SELECT * FROM 履修リスト WHERE 授業コード='001';
SELECT * FROM 履修リスト WHERE 授業コード='001' AND 得点>=80;

履修リストで授業コード001をとっている学生で80点以上の学籍番号、得点の表示(選択、射影

SELECT 学籍番号, 得点 FROM 履修リスト WHERE 授業コード='001' AND 得点>=80;

4. データの消去

履修リストからの00003のデータ削除

DELETE 履修リスト WHERE 学籍番号='00003';

5. データの更新

履修リストの変更:00002の授業コード001の得点を78に変更

UPDATE 履修リスト SET 得点=78 WHERE 学籍番号='00002' AND 授業コード='001';

6. 表の結合

学生リスト、授業リスト、履修リストを結合 ←単純な結合では存在しないデータが発生(結合)

学生リスト、授業リスト、履修リストを結合したものから学籍番号と履修コードが一致するものを表示(結合)

SELECT * FROM 学生リスト,授業リスト,履修リスト
 WHERE 履修リスト.学生番号=学生リスト.学生番号
 AND 履修リスト.授業コード=授業リスト.授業コード;

上記から学籍番号と履修コードが一致し、経営情報システム論を履修して、得点が80点以上のものを表示(結合、選択)

SELECT * FROM 学生リスト,授業リスト,履修リスト
WHERE 履修リスト.学生番号=学生リスト.学生番号
AND 履修リスト.授業コード=授業リスト.授業コード
AND 履修リスト.授業コード='001' AND 得点>=80 ;

上記から学生の氏名、得点の表示(結合、選択、射影)

SELECT 氏名, 得点 FROM 学生リスト,授業リスト,履修リスト
WHERE 履修リスト.授業コード=授業リスト.授業コード
       AND 履修リスト.学生番号=学生リスト.学生番号
       AND 履修リスト.授業コード='001' AND 得点>=80;

データベース管理システム

用語 ポイント
排他制御 あるプログラムがアクセス中は、他のプログラムに同じデータをアクセスさせないように行う制御
デッドロック 実行中のプログラムが、排他制御の結果、他のプログラムが終了するまで待たされて、お互いが永遠に待ち続ける状態になること。
バックアップファイル 障害に備えて、定期的に作成される元のファイルと同じ内容のファイル。
ログファイル データベースの更新内容や更新されたデータを記録したファイル。
ロールバック データベースの更新中に障害が発生した場合、ログファイルから更新前の状態に戻すこと。
ロールフォワード データベースに障害が発生した場合、バックアップファイルとログファイルから障害発生時点のデータベースに復旧すること。
データベースのセキュリティの維持・管理 データベースにおいて、データの入力や更新、検索の権限を設定すること。