カテゴリ: 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つが合わさって初めて一つに特定できます。
また、上記の「商品テーブル」の主キーは、「商品コード」です。
応用情報技術者試験を勉強する成子

なぜ候補キーと言うのですか?
主キーの候補だからです。
ただ、応用情報技術者試験においては、両者の違いを厳密に区別しなくてもいいと思います。主キー=候補キーと考えて、問題を解いてもらえばいいでしょう。

②外部キー
外部を参照するキーです。「受注明細テーブル」の外部キーは「商品コード」です。これにより、商品テーブルの情報を参照することができます。
862492bc
参照することは分かりました。
でも、わざわざ外部キーとして定義しなくても、勝手に参照していればいいのではないでしょうか。
過去問(H28春FE午前問29)では、「関係データベースにおいて,外部キーを定義する目的」として,「関係する相互のテーブルにおいて,レコード間の参照一貫性が維持される制約をもたせる。」とあります。もし、この外部キーによる参照制約がないと、参照先の項目が削除されて存在しないなど、データとしての不整合が発生する場合があります。

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正規形に変換する手順が記載されています。この情報も参考に、3つの正規形について整理します。
①第1正規形
「一つの属性に複数の値が入っている場合,単一の値になるように分解する(H25秋AP午前問29)」より。
それ以外には、重複の排除などがあります。
よって、第一正規形とは、(厳密にはもう少したくさんありますが、とりあえず)「繰り返し項目が無いもの」程度に考えておきましょう。

②第2正規形
「候補キーの一部の属性から,候補キー以外の属性への関数従属性がある場合,その関係を分解する(H25秋AP午前問29)」とあります。
候補キーの一部の属性からの関数従属を、「部分関数従属」と言います。
よって、第2正規形とは、「(非キーの)すべての属性が、候補キーに関数従属している」、または、「部分関数従属性が排除された」表です。

※参考ですが、主キーが1つだけの場合、部分関数従属はありません。よって、その場合は第一正規形と第二正規形は同一になります。

③第3正規形
「候補キー以外の属性間に関数従属性がある場合,その関係を分解する(H25秋AP午前問29)」
候補キー以外の属性間に関数従属性がある状態を、推移的関数従属性と言います。
よって、第3正規形とは、「推移的関数従属性が排除された」表です。
■補足解説:推移的関数従属性
属性A、B、Cにおいて、A→B→Cが成り立つが、B→Aが成立しないこと。
たとえば、以下において
http://sm.seeeko.com/archives/15876865.html
注文番号→担当者番号→担当者 が成立します。
ですが、
担当者番号→注文番号 は成立しません。

SQL(Structured Query Language)とは、データベースを操作する言語です。SQL文を使うことで、表からデータを選択したり、追加、削除、変更などが行えます。

■データベースの操作
基本情報のシラバスには「(1)データベースの操作関係データベースのデータの操作として,データの挿入,更新,集合演算(和,差,積,直積),関係演算(選択,射影,結合,商)などの代表的なデータの操作を理解する。」とあります。
ここで、選択、射影、結合について説明します。
①選択
SELECTを使って、行を取り出します。
SELECT * FROM 表 WHERE 行を抽出する条件
②射影
SELECTを使って列を取り出します。
SELECT フィールドA、フィールドB FROM 表
※フィールドA,Bが、取り出す列
③結合
SELECTを使って、複数の表を結合します。
SELECT * FROM 表1、表2 WHERE 表1.フィールドA=表2.
フィールドB
※表1と表2で一致する属性(フィールド)をもとに、
表を結合します。

※実際にやってみたい場合は、以下をhttp://sqlfiddle.com/などで試しましょう。
http://sm.seeeko.com/archives/15876965.html

過去問(H28秋AP午前問28)を見てみましょう。
問28 関係データベースにおける実表と導出表に関する記述のうち,適切なものはどれか。

ア 実表に対する射影,結合などによって導出表が得られる。
イ 導出表は,データを参照する場合だけに用いる。
ウ 導出表は,複数の実表から得られる表である。
エ 導出表は,元の実表の列だけから成る。



正解は、アです。

■データベース言語
SQLの言語はいくつかに分かれます。応用情報試験のシラバスには「データベース言語は,DDL(Data Definition Language:データ定義言語)とDML(Data Manipulation Language:データ操作言語)などに大別される」とあります。もう一つ、DCL(Data Control Language:データ制御言語)があります。

①データ操作言語
 データ操作言語の代表はSELECT(選択)です。それ以外に、INSERT(行の挿入),UPDATE(値の更新) ,DELETE(行の削除)などがあります。

②データ定義言語
データ定義言語には、CREATE文があります。
たとえば、表を作る場合は CREATE TABLE
VIEWを作る場合は CREATE VIEW

③データ制御言語
アクセス権を付与するGRANTや、削除するREVOKEがあります。

■文法
SQLの文法も理解しておきましょう。
基本となるSQL文はSELECT文です。なので、SELECT文でSQLの基本を理解しましょう。
SELECT 表の列名 FROM 表 WHERE 条件

■句
・WHERE 条件を指定する
・GROUP BY グループ化する
・ORDER BY 並び替える
・HAVING →GROUP BYでグループ化している場合の条件を指定します。たとえば、グループ化して平均値(AVG)を求め、そのAVGの値が70以上など(HAVING AVG(得点)>= 70)


過去問(H25春FE午前問28)をみてみましょう
問28“中間テスト表からクラスごと,教科ごとの平均点を求め,クラス名,教科名の昇順に表示するSQL文中のaに入れるべき字句はどれか。
中間テスト(クラス名,教科名,学生番号,名前,点数)
〔SQL文〕
 SELECT クラス名,教科名, AVG(点数) AS 平均点 FROM 中間テスト [ a ]
 
ア GROUP BYクラス名,教科名 ORDER BY クラス名, AVG(点数)
イ GROUP BY クラス名,教科名 ORDER BY クラス名,教科名
ウ GROUP BY クラス名,教科名,学生番号 ORDER BY クラス名,教科名,平均点
工 GROUP BYクラス名,平均点 ORDER BY クラス名,教科名




実際に実行してみた様子は以下です。
http://sm.seeeko.com/archives/15876965.html

正解はイ

↑このページのトップヘ