カテゴリ: 5.データベース

1.データベースとは
データベース(DataBase)とは、言葉の通り、データ(Data)の土台(Base)となるものです。
例えば、各企業では、顧客データベースがあります。ここでは、顧客ID,顧客名、所在地などの情報が、Excelなどの表計算ソフトの表のように整理されています。
多少乱暴な言い方ですが、データベースの見た目は、Excelの表と思っていいでしょう。
情報セキュリティマネジメント試験を目指す剣持成子_7 

じゃあ、わざわざデータベースを利用せずに、Excelでもいいのでは?




小さいシステムであれば、Excelで十分でしょう。でも、データベースならではの機能があります。
たとえば、データの重複をさけるように正規化をしますし、SQL文を使って高度な組み合わせができます。また、インデックスを使って高速検索ができるようになります。

SQL(Structured Query Language)とを直訳すると、Structured(構造化された)Query(問い合わせ)の言語(Language)となります。Query(問い合わせ)先はデータベースで、データベースへの操作を行う言語です。

(1)テーブル(表)、フィールド(項目)、レコード、行、列
これらの言葉を、理解しておきましょう。
図のように、テーブルの横軸がレコード(行)で、縦軸がフィールド(列)になります。
レコードとフィールド_情報セキュリティマネジメント試験 

(2)インデックス
インデックス(index)は「索引」という意味です。本の最後にある索引をイメージしてください。索引があれば、探したい情報に早くたどり着けます。この機能が、データベースにもあります。
過去問(H24年秋FE午前問27)では、「関係データベースの表の列に利用者がインデックスを設定する目的」として、「データの格納位置への効率的なアクセスが可能となり,検索速度の向上が期待できる」と述べられています。

(3)関係データベース
 このような表で表されるデータベースを関係データベース(リレーショナルデータベース、RDB)と言います。関係(リレーション)でいくつもの表がつながっているから、このように言われます。
参考までに、関係データベース以外には、木構造の階層型データベースとネットワーク型データベースの3つがあります。

ある値Xが決まると、Yが一意に決めることができる場合、「YはXに関数従属している」と言います。
以下の顧客テーブルがあるとします。
顧客(顧客番号、氏名、住所、電話番号) ※主キーは「顧客番号」です。
このとき、「顧客番号」が決まると「氏名」が決まります。また、氏名だけでなく、「住所」や「電話番号」も決まります。
このような場合、「氏名は顧客番号に関数従属している」といい、「顧客番号→氏名」と表します。

参考ですが、過去問(H28春AP午前)の抜粋(一部改変)を見てみましょう。
関数従属は、次のように表されます。
(1)属性Xの値が与えられると,属性Yの値を一意に決めることができる。(左図)
(2)属性Xと属性Yの二つの値が与えられると,属性Zの値を一意に決めることができる。(右図)
aa


2.キー(key)
①主キー
行を一意に識別するものを候補キーと言います。この中から、管理上最適なものが主キーです。
上記の「受注明細テーブル」の主キーは、「受注番号と明細番号」です。受注番号だけでは行を1つに特定できず、2つが合わさって初めて一つに特定できます。
また、上記の「商品テーブル」の主キーは、「商品コード」です。
応用情報技術者試験を勉強する成子
なぜ候補キーと言うのですか?
主キーの候補だからです。
ただ、応用情報技術者試験においては、両者の違いを厳密に区別しなくてもいいと思います。主キー=候補キーと考えて、問題を解いてもらえばいいでしょう。

②外部キー
外部を参照するキーです。「受注明細テーブル」の外部キーは「商品コード」です。これにより、商品テーブルの情報を参照することができます。

3.E-R 図
データの実体(entity)とその関連(relationship)を表現します。
過去問(H24FE春問28)では、「E-R図に関する記述」として、「業務で扱う情報をエンティティ及びエンティティ間のリレーションシップとして表現する。」と述べられています。
エンティティというのがよく分からないかもしれません。エンティティとはデータの実体のことですが、表(テーブル)と考えていいです。たとえば、上に表を掲載していますが、「受注明細」「商品」が、それぞれエンティティになります。
両者の関係をE-R図で表すと、以下になります。
情報セキュリティマネジメント試験のE-R図 

過去問(今回はH27年春DB午後の資料を引用)では、E-R図のルールに関して、以下の説明があります。
(1)エンティティタイプとリレーションシップの表記ルールを,図1に示す。
 ① エンティティタイプは,長方形で表し,長方形の中にエンティティタイプ名を記入する。
 ② リレーションシップは,エンティティタイプ間に引かれた線で表す。
   “1対1"のリレーションシップを表す線は,矢を付けない。
   “1対多”のリレーションシップを表す線は,“多”側の端に矢を付ける。
   “多対多”のリレーションシップを表す線は,両端に矢を付ける。
データベーススペシャリスト試験のe-r図

なぜデータの正規化が必要なのでしょうか。過去問では、「データの正規化を行う目的」として,「データか重複したり,データ更新の際に矛盾が生じたりしないようにする(H21秋IP問63)」と述べられています。
以下のテーブルを見てください。

◆受注明細テーブル
受注番号明細番号商品コード商品名数量
158671TV2000620型テレビ20
158672TV2400524型テレビ10
158673TV2800728型テレビ5
158681TV2400524型テレビ8
(表はH22年AP午前問32より)

この受注明細テーブルは正規化されているでしょうか。
情報セキュリティマネジメント試験を目指す剣持成子_11 

正規化されていないと思います。
なぜなら、商品コードと商品名の状態がよくないと思います。
その通り。この表では、商品コードが決れば商品名が決まるのですが、不整合が起きる可能性があります。
たとえば、以下のように、同じ商品コード(TV24005)であっても、「24型テレビ」と「23型テレビ」という不整合が起きます。
受注番号明細番号商品コード商品名数量
158671TV2000620型テレビ20
158672TV2400524型テレビ10
158673TV2800728型テレビ5
158681TV2400523型テレビ8
このような不整合を無くすために正規化をします。
上記を正規化し、以下の2つのテーブルに分けます。

◆受注明細テーブル
受注番号明細番号商品コード数量
158671TV2000620
158672TV2400510
158673TV280075
158681TV240058

◆商品テーブル
商品コード商品名
TV2400524型テレビ
TV2000620型テレビ
TV2800728型テレビ

正規化には、第1正規形、第2正規形、第3正規系があります。
過去問(H25秋AP午前問29)では、関係を第一正規系⇒第2正規形⇒第3正規形に変換する手順が記載されています。
①第一正規系
「一つの属性に複数の値が入っている場合,単一の値になるように分解する(H25秋AP午前問29)」より。
それ以外には、重複の排除などがあります。
②第2正規形
「候補キーの一部の属性から,候補キー以外の属性への関数従属性がある場合,その関係を分解する(H25秋AP午前問29)」
③第3正規形
「候補キー以外の属性間に関数従属性がある場合,その関係を分解する(H25秋AP午前問29)」

さて、データベースの正規化を実際にやってみましょう。たとえば、レストランでカレーを食べたとき、以下のレシートがあったとします。これをデータベース化しましょう。
database


■非正規形
これを表にすると、以下の1行目のようになります。
注文番号担当者番号担当者名商品番号商品名数量単価
102117016鈴木010カレー1800
202サラダ1300
301コーヒー1200
102118008田中012パスタ2900
301コーヒー2200
※合計金額は自動計算できますので、データベースに記録する必要はありません。

上記の表の場合、1つの注文番号に、商品が複数並んでいますので、データベースとしては適正な状態ではありません。そこで、正規化を行います。

■第一正規形
第一正規系では、上記のように、1行に複数の属性があるような状態を解消します。
注文番号担当者番号担当者名商品番号商品名数量単価
102117016鈴木010カレー1800
102117016鈴木202サラダ1300
102117016鈴木301コーヒー1200
102118008田中012パスタ2900
102118008田中301コーヒー2200

これで、以下の注文テーブルが出来上がりました。
注文(注文番号,担当者番号、担当者名、商品番号,商品名,数量,単価)

■第二正規形
第二正規形では、候補キー(およびその一部)からの関数従属性を分割します。
さて、このテーブルの候補キーは何でしょうか。候補キーは、注文番号と、商品番号です。つまり、この2つが決まると、すべての属性が決まります。
候補キーおよびその一部は「注文番号」「商品番号」「注文番号、商品番号」の3つです。この3つからの関数従属性は以下です。
・注文番号→担当者番号、担当者名
・商品番号→商品名、単価
・注文番号、商品番号→数量

この関係をテーブルにします。
【注文】
注文番号担当者番号担当者名
102117016鈴木
102118008田中

【商品】
商品番号商品名単価
010カレー800
012パスタ900
202サラダ300
301コーヒー200

【注文明細】
注文番号商品番号数量
1021170101
1021172021
1021173011
1021180122
1021183012

これで、以下の3つのテーブルが出来上がりました。
注文(注文番号、担当者番号、担当者名)
商品(商品番号、商品名、単価)
注文明細(注文番号、商品番号、数量)


■第三正規形
第三正規形では、候補キー以外の属性にて関数従属性がある場合,その関係を分解します。
今回の場合、注文テーブルにおいて、担当者番号→担当者名という関数従属性があります。
これ分解すると、以下の2つのテーブルになります。
注文(注文番号、担当者番号)
担当者(担当者番号、担当者名)

最終的には以下の4つのテーブルが出来上がります。
注文(注文番号、担当者番号)
担当者(担当者番号、担当者名)
商品(商品番号、商品名、単価)
注文明細(注文番号、商品番号、数量)

【注文】
注文番号担当者番号
102117016
102118008

【担当者】
担当者番号担当者名
016鈴木
008田中

【商品】
商品番号商品名単価
010カレー800
012パスタ900
202サラダ300
301コーヒー200

【注文明細】
注文番号商品番号数量
1021170101
1021172021
1021173011
1021180122
1021183012


↑このページのトップヘ