カテゴリ: 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

正解はイ

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


H28秋AP午前
問29 “サッカーチーム”表と“審判”表から,条件を満たす対戦を導出するSQL文のaに入れる字句はどれか。

 〔条件〕
  ・出場チーム1のチーム名は出場チーム2のチーム名よりもアルファベット順で先にくる。
  ・審判は,所属チームの対戦を担当することはできない。


サッカーチーム
チーム名
X
Y
Z
審判
氏名
所属チーム名
佐藤健太
X
鈴木翔太
Y
高橋拓也
Z


対戦
出場チーム1
出場チーム2
審判氏名
X
Y
高橋拓也
X
Z
鈴木翔太
Y
Z
佐藤健太


〔SQL文〕
 SELECT A.チーム名 AS 出場チーム1,B.チーム名 AS 出場チーム2,C.氏名 AS 審判氏名
    FROM サッカーチーム AS A,サッカーチーム AS B,審判 AS C
    WHERE A.チーム名 < B.チーム名 AND [  a  ]


ア (A.チーム名 <> C.所属チーム名 OR B.チーム名 <> C.所属チーム名)
イ C.所属チーム名 NOT IN (A.チーム名,B.チーム名)
ウ EXISTS
    (SELECT * FROM 審判 AS D WHERE A.チーム名 <> D.所属チーム名 AND B.チーム名 <> D.所属チーム名)
エ NOT EXISTS
    (SELECT * FROM 審判 AS D WHERE A.チーム名=D.所属チーム名 OR B.チーム名 = D.所属チーム名)





【正解】エ

H27秋AP午前
問29    "倉庫別商品在庫集計”表から在庫数の合計を求めたい。倉庫番号'C003'の倉庫で在庫数が100 以上の商品に対して,全ての倉庫における在庫数の合計を求めるSQL文のaに入る適切な字句はどれか。ここで,該当する商品は複数存在するとともに在庫数が100未満の商品も存在するものとする。また,実線の下線は主キーを表す。

倉庫別商品在庫集計(倉庫番号,商品コード,在庫数)

〔SQL文〕
SELECT 商品コード, SUM(在庫数) AS 在庫合計 FROM 倉庫別商品在庫集計
      WHERE [  a  ]
      GROUP BY 商品コード

ア 商品コード = (SELECT 商品コード FROM 倉庫別商品在庫集計
               WHERE倉庫番号 = 'C003' AND 在庫数 >= 100)
イ 商品コード = ALL(SELECT 商品コード FROM 倉庫別商品在庫集計
               WHERE倉庫番号 = 'C003' AND 在庫数 >= 100)
ウ 商品コード IN(SELECT 商品コード FROM 倉庫別商品在庫集計
               WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)
エ EXISTS (SELECT * FROM 倉庫別商品在庫集計
               WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)





【正解】ウ

H27春AP午前
間26 "電話番号"列にNULLを含む"取引先"表に対して,SQL文を実行した結果の行数は幾つか。
20170906_3-1
〔SQL文〕
SELECT * FROM 取引先 WHERE 電話番号 NOT LIKE '010%'

ア 1   イ 2     ウ 3   エ 4





NOT LIKE '010%'はあいまい検索で「010」で始まるもの以外ということを表します。
NULL(ヌルと呼ぶ人が多い)は「値が無い」という意味です。LIKEを使った場合、NULLを抽出することはできません。よって、2行目、4行目、5行目の3つが正解です。
【正解】ウです。

(H25春AP午前問29と同じ)
問27 埋込みSQLにおいて,問合せによって得られた導出表を1行ずつ親プログラムに引き渡す操作がある。この操作と関係の深い字句はどれか。

ア CURSOR
イ ORDER BY   
ウ UNION
エ UNIQUE





【正解】ア

H26秋AP午前
問25 表に対するSQLのGRANT文の説明として,適切なものはどれか。

ア パスワードを設定してデータベースへの接続を制限する。
イ ビューを作成して,データベースへのアクセス処理を隠蔽し,表を直接アクセスできないようにする。
ウ 表のデータを暗号化して,第三者がアクセスしてもデータの内容が分からないようにする。
エ 表の利用者に対し,表への問合せ,更新,追加,削除などの操作を許可する。





【正解】エ

H26春AP午前
問28 "東京在庫" 表と "大阪在庫" 表に対して,SQL文を実行して得られる結果はどれか。ここで,実線の下線は主キーを表す。
20170906_3-2





【正解】エ

H25秋AP午前
(H21春AP午前問31と同じ)
問27 クライアントサーバシステムにおけるストアドプロシージャに関する記述のうち,誤っているものはどれか。
ア 機密性の高いデータに対する処理を特定のプロシージャ呼出しに限定することによって,セキュリティを向上させることができる。
イ システム全体に共通な処理をプロシージャとして格納しておくことによって,処理の標準化を行うことができる。
ウ データベースへのアクセスを細かい単位でプロシージャ化することによって,処理性能(スループット)を向上させることができる。
エ 複数のSQL文から成る手続を1回の呼出しで実行できるので,クライアントとサーバの間の通信回数を減らすことができる。





【正解】ウ

問31 地域別に分かれている同じ構造の三つの商品表,"東京商品","名古屋商品","大阪商品"がある。次のSQL文と同等の結果が得られる関係代数式はどれか。ここで,三つの商品表の主キーは"商品番号"である。

SELECT * FROM 大阪商品
   WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 東京商品)
UNION
SELECT * FROM 名古屋商品
   WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 東京商品)

ア (大阪商品 ∩ 名古屋商品)-東京商品
イ (大阪商品 ∪ 名古屋商品)-東京商品
ウ 東京商品-(大阪商品 ∩ 名古屋商品)
エ 東京商品-(大阪商品 ∪ 名古屋商品)





【正解】イ

H25春AP午前
問27 クライアントサーバシステムにおいて,クライアント側からストアドプロシージャを利用したときの利点として,適切なものはどれか。

ア クライアントとサーバの間の通信量を削減できる。
イ サーバ内でのデータベースファイルへのアクセス量を削減できる。
ウ サーバのメモリ使用量を削減できる。
エ データの格納領域を削減できる。





【正解】ア

問30 A表は外部キーによってB表から参照されている。ここで,A表の行を削除するとき,それを参照しているB表の行を同時に全て削除することを指定するSQLの参照動作はどれか。

ア CASCADE
イ CONSTRAINT
ウ NO ACTION
エ REFERENCES





【正解】ア

H24春AP午前
問26 販売価格が決められていない“商品"表に,次のSQL文を実行して販売価格を設定する。このとき,販売ランクがbの商品の販売価格の平均値は幾らか。

 UPDATE 商品 SET 販売価格 =
        CASE
            WHEN 販売ランク = 'a' THEN 単価 * 0.9
            WHEN 販売ランク = 'b' THEN 単価 - 500
            WHEN 販売ランク = 'c' THEN 単価 * 0.7
            ELSE  単価
 END

H24春AP午前問26

 ア 1,675     イ 2,100     ウ 2,250     エ 2,500






【正解】エ

H23秋AP
問30 更新可能なビューを作成するSQL文はどれか。ここで, SQL文中に現れる表は全て更新可能とする。
ア CREATE VIEW 高額商品(商品番号,商品名,商品単価)
   AS SELECT 商品番号,商品名,商品単価 FROM 商品 WHERE 商品単価 > 1000
イ CREATE VIEW 受注商品(商品番号)
   AS SELECT DISTINCT 商品番号 FROM 受注
ウ CREATE VIEW 商品受注(商品番号,受注数量)
   AS SELECT 商品番号,SUM(受注数量) FROM 受注 GROUP BY 商品番号
エ CREATE VIEW 商品平均受注数量(平均受注数量)
   AS SELECT AVG(受注数量) FROM 受注





【正解】ア

H23特別AP午前
問30   "社員"表ど人事異動"表から社員ごとの勤務成績の平均を求める適切なSQL文はどれか。ここで,求める項目は,社員コード,社員名,勤務成績(平均)の3項目とする。
H23特別AP午前問30表

ア SELECT 社員.社員コード,社員名,AVG(勤務成績) AS "勤務成績(平均)"
     FROM 社員,人事異動
     WHERE 社員.社員コード = 人事異動.社員コード
     GROUP BY 勤務成績
イ SELECT 社員.社員コード,社員名,AVG(勤務成績) AS  "勤務成績(平均)" 
     FROM 社員,人事異動
     WHERE 社員.社員コード = 人事異動.社員コード
     GROUP BY 社員.社員コード,社員.社員名
ウ SELECT 社員.社員コード,社員名,AVG(勤務成績)/COUNT(勤務成績) 
                            AS  "勤務成績(平均)"
     FROM 社員,人事異動
     WHERE 社員.社員コード = 人事異動.社員コード
     GROUP BY 社員.社員コード,社員.社員名
エ SELECT 社員.社員コード,社員名,MAX(勤務成績)/COUNT(*)
                            AS "勤務成績(平均)"
     FROM 社員,人事異動
     WHERE 社員.社員コード = 人事異動.社員コード
     GROUP BY 社員.社員コード,社員.社員名





【正解】イ




■H22春AP午前
問33 表Aから実行結果Bを得るためのSQL文はどれか。
H22春AP問33
ア SELECT 部署コード,社員コード,名前 FROM A
       GROUP BY 社員コード
イ SELECT 部署コード,社員コード,名前 FROM A
       GROUP BY 部署コード
ウ SELECT 部署コード,社員コード,名前 FROM A
       ORDER BY 社員コード,部署コード
エ SELECT 部署コード,社員コード,名前 FROM A
       ORDER BY 部署コード,社員コード





【正解】エ

H29春AP午前
問27 “受注明細”表は,どのレベルまでの正規形の条件を満足しているか。ここで,実線の下線は主キーを表す。

問27





【正解】イ

H28春AP午前
問27 関数従属を次のように表記するとき,属性a~eで構成される関係を第3正規形にしたものはどれか。
20170906_1
20170906_2





【正解】エ

H27秋AP午前
問28 関係R (A,B,C,D,E,F)において,次の関数従属が成立するとき,候補キーとなるのはどれか。

〔関数従属〕
A→B,A→F,B→C,C→D,{B,C}→E,{C,F}→A

ア B
イ {B,C}
ウ {B,F}
エ {B,D,E}





【正解】ウ

H26秋AP午前
問26 関係R(A,B,C,D,E,F)において,関数従属A→B,C→D,C→E,{A,C}→Fが成立するとき,関係Rの候補キーはどれか。

ア A
イ C
ウ {A,C}
エ {A,C,E}





【正解】ウ

問27 その月に受注した商品を,顧客ごとにまとめて月末に出荷する場合,受注クラスと出荷クラスとの間の関連のa,bに入る多重度の組合せはどれか。ここで,出荷のデータは実績に基づいて登録される。また,モデルの表記にはUMLを用いる。
20170906_3






【正解】ウ

H26春AP午前
問26 UMLを用いて表した部門と社員の関係を表すデータモデルの説明のうち,適切なものはどれか。
20170906_4
ア 社員が1人も所属していない部門は登録できない。
イ 社員は複数の部門に所属することができる。
ウ どの部門にも所属しない社員は登録できない。
エ 一つの部門に複数の社員は所属できない。





【正解】ウ

問27 次の表はどこまで正規化されたものか。
20170906_5
ア 第2正規形  イ 第3正規形  ウ 第4正規形  エ 非正規形





【正解】ア

H25秋AP午前
問29 関係を第2正規形から第3正規形に変換する手順はどれか。

ア 候補キー以外の属性から,候補キーの一部の属性に対して関数従属性がある場合,その関係を分解する。
イ 候補キー以外の属性間に関数従属性がある場合,その関係を分解する。
ウ 候補キーの一部の属性から,候補キー以外の属性への関数従属性がある場合,その関係を分解する。
エ 一つの属性に複数の値が入っている場合,単一の値になるように分解する。





【正解】イ

H25春AP午前
問28 “プログラマは全て社員であり,社員の約10%を占める。社員は社員番号と氏名をもち,職種がプログラマである場合は,使用できるプログラム言語を一つ以上もつ。”という状況を記録するデータベース設計案として,適切なものはどれか。ここで,実線の下線は主キーを,破線の下線は外部キーを表す。
20170906_6





【正解】エ

応用情報技術者試験シラバスでは、「データベースの論理設計」に関して、以下の記載があります。

③ データベースの論理設計
データの重複や矛盾が発生しないテーブル(表)設計の考え方,主キー,外部キーなどの概念,参照制約,一貫性制約などの制約を理解する。また,ユーザビューの機能と定義を理解する。

用語例 配置モード,親子集合順序,親子集合,索引,フィールド(項目),レコード,ファイル,NULL,一意性制約

過去問の例

H28春AP午前

問29 次の表において,“在庫” 表の製品番号に定義された参照制約によって拒否される可能性がある操作はどれか。ここで,実線の下線は主キーを,破線の下線は外部キーを表す。
20170906_2-1
ア “在庫” 表の行削除
イ “在庫” 表の表削除
ウ “在庫” 表への行追加
エ “製品” 表への行追加

正解は、ウです。

H27春AP午前

問28 “学生” 表が次のSQL文で定義されているとき,検査制約の違反となるSQL文はどれか。

CREATE TABLE 学生(学生番号CHAR(5)PRIMARY KEY,
          学生名CHAR(16),
          学部コードCHAR(4),
          住所CHAR(16),
          CHECK(学生番号LIKE 'K%'))
20170906_2-2
ア DELETE FROM 学生 WHERE 学生番号 = 'K1002'
イ INSERT INTO 学生 VALUES ('J2002','渡辺次郎','Mee6','東京都')
ウ SELECT * FROM 学生 WHERE 学生番号 = 'K1001'
エ UPDATE 学生 SET 学部コード = 'N001' WHERE 学生番号 LIKE 'K%'

正解は、イです。

H26春AP午前

問25 SQL文においてFOREIGN KEY と REFERENCES を用いて指定する制約はどれか。
ア キー制約
イ 検査制約
ウ 参照制約
エ 表明

正解は、ウです。

排他制御
複数の人がデータベースを使うと、整合性が保てない場合があります。そこで、排他制御が用意されています。この機能により、データの一貫性が保たれます。

トランザクション管理
 トランザクションとはデータベースの処理における、一連の動作のことです。トランザクションでは処理では、データの整合性を保つためにACIDと言われる4つの特性が求められます。
 なぜ整合性を取る必要があるのでしょうか。たとえば、Webにて株を100株売却した場合を考えてください。保有する株数を減らすと同時に、売却して得た代金を増やす処理が必要です。もし、株数を減らす処理したあとに、システム障害が発生し、売却した代金が増えなかったら困りますよね。また、複数人が同時に異なるデータを書き込んだ場合に、データの不整合が起きる可能性があります。
aa
応用情報技術者試験シラバスでは、「(3)トランザクション管理」として、「データベースは複数の利用者が同時にアクセスするので,トランザクション処理にはACID特性が求められること,四つの特性の意味を理解する。」とあります。

ACIDとは、原子性、一貫性、独立性、耐久性の4つです。
※参考ですが、シラバスにはこれら4つの項目の記載や解説はなく、ACIDという言葉だけの記載です。

 では、ACID特性の4つの内容を確認しましょう。
①A:原子性(atomicity)
トランザクションが終了したときの状態は,処理済みか未処理のどちらかしかないという性質
②C:一貫性(Consistency)
同一データベースに対する同一処理は,何度実行しても結果は同じであるという性質
③I:独立性(Isolation)
一つのトランザクションの処理結果は,他のトランザクション処理の影響を受けないという性質。
④D:耐久性(Durability)
トランザクション完了後にハードウェア障害が発生しても,更新されたデータベースの内容は保証されるという性質

H25春AP午前(H23特別AP午前 問32と同じ)
問30 トランザクションの原子性(atomicity)の説明として,適切なものはどれか。
ア データの物理的格納場所やアプリケーションプログラムの実行場所を意識することなくトランザクション処理が行える。
イ トランザクションが終了したときの状態は,処理済みか未処理のどちらかしかない。
ウ トランザクション処理においてデータベースの一貫性が保てる。
エ 複数のトランザクションを同時に処理した場合でも,個々の処理結果は正しい。
正解は、イです。

インデックス
応用情報技術者試験シラバスでは、「(4)データベースの性能向上」として、「データベースへのアクセス効率向上のために,インデックスを有効に活用する考え方を理解する。」とあります。

過去問(H27春AP)
問29“部品”表のメーカコード列に対し,B゛木インデックスを作成した。これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカのデータ件数は十分に多く,メーカコードの値は均一に分散されているものとする。
  また,“部品”表のごく少数の行には,メーカコード列にNULLが設定されている。
  ここで,実線の下線は主キーを,破線の下線は外部キーを表す。




部品(部品コード,部品名,メーカコード)
メーカ(メーカコード,メーカ名,住所)
メーカコードの値が1001以外の部品を検索する。
メーカコードの値が1001でも4001でもない部品を検索する。
メーカコードの値が4001以上,4003以下の部品を検索する。
メーカコードの値がNULL以外の部品を検索する。
ああ

問26 データベースの3層スキーマ構造に関する記述のうち,適切なものはどれか。

ア 概念スキーマは,データの物理的関係を表現する。
イ 外部スキーマは,データの利用者からの見方を表現する。
ウ 内部スキーマは,データの論理的関係を表現する。
エ 物理スキーマは,データの物理的関係を表現する。
正解は、イです。

ACID特性の一貫性や独立性を保つための機能に、排他制御があります。皆さんが日頃、表計算ソフトなどによってファイルを操作するとき、誰かが開いていると、読み取り専用でしか開けないと思います。これは、複数の人で同じデータを更新すると、不整合が起きるからです。そこで、誰がデータを操作しているときに、他の人のデータ操作を制限する仕組みがロックです。ロックには、
共有ロックと専有ロックがあります。

専有ロック
文字通り、一人でロックを専有します。ロックされている間は、他の人が書き込むことはもちろん、読むこともできません。複数人による操作でデータの不整合を無くすために、データに書き込みをする場合は、専有ロックがかかります。

共有ロック
データを読むときに使用します。複数人が同時にロックをかけることができます(つまり、ロックを共有できるので、「共有ロック」と言います)。誰かがが共有ロック中に、他の人も読むことはできます(書き込みはできません)。
応用情報技術者試験を勉強する成子 

読むだけなのにロックをかけるのはなぜですか?




他の人にデータを読んでいることを伝えるためです。
こうすることで、専有ロックをかけられてしまう(=つまり、読めなくなる)ことを防ぎます。
ロック
共有ロック中は、他のトランザクションからの共有ロックのみが可能です。専有ロック中は、他のトランザクションからの一切のロックができません。
その関係を表にすると、以下になります。

         他のTRからの共有ロック   他のTRからの専有ロック
共有ロック中       ◎               ×
専有ロック中         ×             ×
※TR=トランザクション

過去問を見てみましょう。
H25春AP午前
問31 トランザクションの同時実行制御に用いられるロックの動作に関する記述のうち,適切なものはどれか。

ア 共有ロック獲得済の資源に対して,別のトランザクションからの新たな共有ロックの獲得を認める。
イ 共有ロック獲得済の資源に対して,別のトランザクションからの新たな専有ロックの獲得を認める。
ウ 専有ロック獲得済の資源に対して,別のトランザクションからの新たな共有ロックの獲得を認める。
工 専有ロック獲得済の資源に対して,別のトランザクションからの新たな専有ロックの獲得を認める。





正解は、アです。

■1.デッドロックとは
2人が紙工作をしていて仕上げるには、糊(のり)とハサミの2つが必要としましょう。A君が糊(のり)を専有していて、B君がハサミを専有している場合、どちらも工作を仕上げることができません。同じことがトランザクションにも言えます。2つのトランザクションが、共通の資源をロックしあうと、それ以上進まない状態に陥る可能性があります。これをデッドロックと言います。

過去問(H24秋IP問67)では、「デッドロックの説明」として,「複数のプロセスが共通の資源を排他的に利用する場合に,お互いに相手のプロセスが占有している資源が解放されるのを待っている状態」とあります。
デッドロック

■2.デッドロックの過去問
平成29年春期 午前 問29
問29 トランザクションAとBが,共通の資源であるテーブルaとbを表に示すように更新するとき,デッドロックとなるのはどの時点か。ここで,表中の①~⑧は処理の実行順序を示す。また,ロックはテーブルの更新直前にテーブル単位で行い,アンロックはトランザクション終了時に行うものとする。
問29





正解は、エです。

問28 “部品”表のメーカコード列に対し,B+木インデックスを作成した。これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカのデータ件数は十分に多く,“部品”表に存在するメーカコード列の値の種類は十分な数があり,かつ,均一に分散しているものとする。また,“部品”表のごく少数の行には,メーカコード列にNULLが設定されている。実線の下線は主キーを,破線の下線は外部キーを表す。
問28
ア メーカコードの値が1001以外の部品を検索する。
イ メーカコードの値が1001でも4001でもない部品を検索する。
ウ メーカコードの値が4001以上, 4003以下の部品を検索する。
エ メーカコードの値がNULL以外の部品を検索する。
正解は、ウです。

ef6167f8 

SQLって簡単に試せないですよね?
データベースを作るのも大変そうです。



Webで簡単に試せるツールがあります。
SQLを実際にやってみましょう。
問題は、H25春FE午前問28です。
http://sm.seeeko.com/archives/15877091.html

■プラットフォーム
Webで簡単にSQLのテストができる以下のサイトを活用しました。
http://sqlfiddle.com/
・ブラウザはChrome
・MySQL5.6を選択

※または、いろいろなプログラムが書けるWebサイトであるpaiza.ioも使いやすいです。
https://paiza.io/ja

■テーブルの作成と値のセット
①TABLEの作成と値のセットを同時にやります。
CREATE TABLE TEST
    (`クラス名` varchar(3), `教科名` varchar(3), `学生番号` int, `名前` varchar(5), `点数` int)
;
   
INSERT INTO TEST
    (`クラス名`, `教科名`, `学生番号`, `名前`, `点数`)
VALUES
    ('2A', '英語', 11, '山田太郎',70),
    ('2A', '英語', 12, '鈴木太郎',80),
    ('2A', '英語', 13, '山田次郎',75),
    ('2A', '数学', 11, '山田太郎',60),
    ('2A', '数学', 12, '鈴木太郎',85),
    ('2A', '数学', 13, '山田次郎',95),
    ('2B', '英語', 11, '伊藤太郎',95),
    ('2B', '英語', 12, '大木太郎',85),
    ('2B', '英語', 13, '斉藤次郎',75),
    ('2B', '数学', 11, '伊藤太郎',55),
    ('2B', '数学', 12, '大木太郎',85),
    ('2B', '数学', 13, '斉藤次郎',85)
;
■SQLの実行
・SELECT文の実行
・選択肢ア
select `クラス名`,`教科名`,AVG(`点数`) AS AVG from TEST GROUP BY `クラス名`,`教科名` ORDER BY AVG;
・選択肢イ
select `クラス名`,`教科名`,AVG(`点数`) AS AVG from TEST GROUP BY `クラス名`,`教科名` ORDER BY `クラス名`,`教科名`;

コピペで実行できないかもしれないので、テキストファイルを貼っておきます。
http://sm.seeeko.com/SQL.txt

■その他
テーブルを作るときに、主キー制約を付ける場合はPRYMARY KEYを付けます。こうすることで、重複する行を作成できなくなります。
CREATE TABLE TEST
    (`クラス名` varchar(3), `教科名` varchar(3) , `学生番号` int , `名前` varchar(5), `点数` int, PRIMARY KEY(`クラス名` , `教科名`, `学生番号`))
;

■H28春FE午前問27
この問題をもとに、テーブルを作成して設問にある操作を実行してみました。
また、基本操作として、選択、射影、結合の結果も表示します。

/* テーブルXの作成 */
CREATE TABLE X
    (`学生番号` varchar(3), `氏名` varchar(8), `学部コード`  varchar(5))
;
   
INSERT INTO X
    (`学生番号`, `氏名`, `学部コード`)
VALUES
    ('1', '山田太郎', 'A'),
    ('2', '情報一郎', 'B'),
    ('3', '鈴木花子', 'A'),
    ('4', '技術五郎', 'B'),
    ('5', '小林次郎', 'A'),
    ('6', '試験桃子', 'A')
;
CREATE TABLE Y
    (`学部コード` varchar(3), `学部名` varchar(8))
;
   
INSERT INTO Y
    (`学部コード`, `学部名`)
VALUES
    ('A', '工学部'),
    ('B', '情報学部'),
    ('C', '文学部');
   
/* SQL文の実行 */
select 学部名,学生番号,氏名 from X,Y
  where X.学部コード=Y.学部コード AND X.学部コード='B';
   
   
/* テーブルXの表示 */
select * from X;
/* 選択 */
select * from X where 学部コード='A';
/* 射影 */
select 学生番号,氏名 from X;
/* 結合 */
select * from X,Y
  where X.学部コード=Y.学部コード AND X.学部コード='B';

副問い合わせとは、SQL文の中でSQL文を実行する処理です。
メインの処理を主問い合わせ、サブとなるのを副問い合わせと言います。
副問い合わせには、INとEXISTSがあります。

(1)IN
たとえば、過去問(H22春FE午前問31)を参考にすると、以下です。
select 商品番号 FROM 商品
where 商品番号 IN (SELECT 商品番号 FROM 在庫);

これは、「主問い合わせ(副問い合わせ)」の流れになっています。この例では、副問い合わせの結果を踏まえて主問い合わせが行われます。
具体的には、副問い合わせで、在庫がある商品番号が出されます。そして、そこにある商品番号を表示しています。
e1f51e18 

ということは、在庫がある商品番号を表示しているのですね。
はい、そうです。

(2)EXISTS
さきのINで表現したSQL文をEXSITSを使うと以下のようになります。比較のため、INの場合と両方を記載します。
①INの場合
select 商品番号 FROM 在庫
where 商品番号 IN (SELECT 商品番号 FROM 商品);

②EXISTSの場合
select 商品番号 FROM 在庫
where EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号=在庫.商品番号);

EXISTSの場合は、INと違い、True かFalseしか返しません。
また、INの場合、副問い合わせの検索結果をもとに主問い合わせを実行します。EXISTSの場合は、副問い合わせをしながら(1行ずつ)、主問い合わせを1行ずつ実行します(おそらく)。このあたりが、INとEXSITSの違いです。

http://sqlfiddle.com/などを使って試してみたい方は、以下を活用してください。
商品テーブルをX、在庫テーブルをYとしています。

----ここから
/* テーブルXの作成 */
CREATE TABLE X
    (`商品番号` int, `商品名` varchar(8), `単価`  int)
;
    
INSERT INTO X
    (`商品番号`, `商品名`, `単価`)
VALUES
    ('1', 'エアコン', '50000'),
    ('2', 'ミシン', '30000'),
    ('3', 'テレビ', '100000'),
    ('4', '冷蔵庫', '140000'),
    ('5', 'ドライヤー', '12000'),
    ('6', '掃除機', '24000')
;
CREATE TABLE Y
    (`倉庫番号` varchar(3), `商品番号` int, `在庫数` int)
;
    
INSERT INTO Y
    (`倉庫番号`, `商品番号`, `在庫数`)
VALUES
    ('A', '1', '100'),
    ('B', '2', '200'),
    ('C', '3', '100');

ーーーここまで

では実際の問題をみてみましょう。

-----------
問31 "商品"表,“在庫"表に対する次のSQL文と,同じ結果が得られるSQL文はどれか。ここで,下線部は主キーを表す。

SELECT 商品番号 FROM 商品
 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫)

商品(商品番号,商品名,単価)
在庫(在庫番号,商品番号,在庫数)

ア SELECT 商品番号 FROM 在庫
 WHERE EXISTS (SELECT 商品番号 FROM 商品)
イ SELECT 商品番号 FROM 在庫
 WHERE NOT EXISTS (SELECT 商品番号 FROM 商品)
ウ SELECT 商品番号 FROM 商品
 WHERE EXISTS (SELECT 商品番号 FROM 在庫
  WHERE商品.商品番号=在庫.商品番号)
エ SELECT 商品番号 FROM 商品
 WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫
  WHERE商品.商品番号=在庫.商品番号)
-----------

正解はエです。

以下、少し難しい問題です。

H20秋SW午前問66
問66  "社員"表から,男女それぞれの最年長社員を除くすべての社員を取り出すSQL文とするためにaに入る副問合せはどれか。ここで,“社員"表は次の構造とし,下線部は主キーを表す。

社員(社員番号,社員名,性別,生年月日) ※主キーは社員番号

SELECT 社員番号,社員名 FROM 社員 AS S1 WHERE 生年月日 > ( a )
ア SELECT MIN(生年月日) FROM 社員 AS S2 GROUP BY S2.性別
イ SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.生年月日 > S2.生年月日 OR S1.性別=S2.性別
ウ SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.性別 = S2.性別
工 SELECT MIN(生年月日) FROM 社員 GROUP BY S2.性別

→正解はウ

データベースサーバの電源故障などにより、データベースに障害が発生することがあります。データベースには、障害が発生した場合、特にメモリ上のデータは消えてしまうことがあります。そんな場合でも、データを障害発生の直前に戻す機能が備わっています。

まずは、データの書き込み処理を理解しましょう。データの追加・変更などの処理によって、データの保存には次の3つのアクションがあります。
①SQL操作(UPDATEやDELETEなど)
 更新前ログと更新後ログをメモリに書き込みます。ログは、操作の都度記載されます。このときの更新前ログが、ロールバックに活用されます。製品の実装にもよりますが、このログはファイルにも書き込むことでしょう(そうしないと、システム障害時にロールバックできません)。ログファイルはジャーナルファイル(Oracleの場合はREDOログ)と言われます。

②コミット(COMMIT)を実行
 変更を確定します。このとき、確定した変更内容をログに書き込みます。この変更後のログファイルがロールフォワードに活用されます。※このとき、先ほどのSQL操作で一時保存していた更新前ログなどは不要になるので破棄されます。

③チェックポイント時
 コミットによって作成された確定のログファイルを、ディスクのデータベースに書き込みます。
db_rollback
このような3つのアクションに分けず、いきなりデータベースに書き込んでもいいという考えもあります。
しかし、ディスクに書き込む処理には時間がかかりますので非効率です。そこで、メモリ上に書き込むのです。そして、データベース上のデータの確定保存するには、コミット(COMMIT)という命令を実行します。これによって、ディスク上のログに書き込みが確定され、データの更新が確定します。
しかし、この時点でも、まだディスクのデータベースには書き込まれません。実際に書き込まれるのはチェックポイントというタイミングです。

このあたりの動作は製品によって異なります。資料としては以下が分かりやすいです。
https://www.atmarkit.co.jp/ait/articles/1107/01/news140_2.html


■ロールバック
トランザクションが途中で終了している場合、データの不整合が起こる可能性があります。(不整合の例は以下に記載しました。
http://sm.seeeko.com/archives/15876944.html )
そこで、ログファイルの更新前情報を使ってトランザクションを元に戻します。
過去問(H28秋SM午前2問13)では、「データベースのロールバック処理の説明」として、「ログの更新前情報を用いて,トランザクション開始直前の状態にデータを復元させる」とあります。

■ロールフォワード
トランザクションはすでに完了しています。チェックポイントが来ていない場合において、ディスクにはデータが反映されていません。そこで、ログファイルの更新後情報を使ってディスクに書き込みをすれば、最新の状態になります。
ロールフォワードは「ログの更新後情報を用いて,トランザクション開始後の障害直前の状態にデータを復元させる(H28秋SM午前2問13不正解選択肢)」ことです。

次のT1~T3の3つのトランザクションで考えます。
T1の場合、トランザクションが終了し、チェックポイントが過ぎています。データはディスクに反映されていますから、何も処理する必要はありません。
T2ですが、トランザクションが途中で終了しています。データの不整合が起こる可能性がありますから、ログファイルの更新前情報を使ってトランザクションを元に戻します。この処理をロールバックと言います。
最後にT3ですが、トランザクションはすでに完了しています。チェックポイントが来ていないので、ディスクにはデータが反映されていません。そこで、ログファイルの更新後情報を使ってディスクに書き込みをすれば、最新の状態(障害直前の状態)になります。この処理をロールフォワードと言います。

tran

過去問(H16春FE午後問2)にて、データベースの障害回復機能の問題があるので紹介します。
この問題を解いてみるといいでしょう。
問2 データベースの障害回復機能に関する次の記述を読んで,設問1~4に答えよ。
あるデータベースシステムでは,定期的にバックアップをとるとともに,更新前情報及び更新後情報をログファイルに記録している。システム障害が発生した場合は,ロールバック処理,ロールフォワード処理及び再処理を組み合わせたウォームスタートで再始動する運用を行っている。
このデータベースシステムでは,チェックポイントで,更新前ログ及び更新後ログヘの情報書出しとデータベースへの書出しを一致させている。したがって,例えばロールバック処理は,ログファイル上の更新前情報を使って,データベースを直前のチェックポイントの時点まで戻すことによって,整合性を保つ。

H28春AP午前
問28 トランザクションA(処理A1→処理A2 順に実行する)とトランザクションB(処理B1→処理B2 順に実行する)が,データベースの資源SとTに対し,次のように処理A1→処理B1→処理A2→処理B2 順で専有ロックを要求する場合,デッドロックが発生する資源の組合せはどれか。
なお,ロックは処理開始時にかけ,トランザクション終了時に解除する。
20170906_4-1






正解は、イです。

問30 媒体障害の回復において,最新のデータベースのバックアップをリストアした後に,トランザクションログを用いて行う操作はどれか。

ア バックアップ取得後でコミット前に中断した全てのトランザクションをロールバックする。
イ バックアップ取得後でコミット前に中断した全てのトランザクションをロールフォワードする。
ウ バックアップ取得後にコミットした全てのトランザクションをロールバックする。
エ バックアップ取得後にコミットした全てのトランザクションをロールフォワードする。






正解は、エです。

H27秋AP午前
問30 チェックポイントを取得するDBMSにおいて,図のような時間経過でシステム障害が発生した。前進復帰(ロールフォワード)によって障害回復できるトランザクションだけを全て挙げたものはどれか。
20170906_4-2





ロールフォワードなので、コミット後のログの更新後情報を用います。
障害発生前にコミットしているのはT4とT5の2つです。
正解は、ウです。

H26春AP午前
(H21春AP午前 問33と同じ)
問29 分散データベースにおいて図のようなコマンドシーケンスがあった。調停者がシーケンス a で発行したコマンドはどれか。ここで,コマンドシーケンスの記述にUMLのシーケンス図の記法を用いる。
20170906_4-3
ア COMMITの実行要求
イ ROLLBACKの実行要求
ウ 判定レコードの書出し要求
エ ログ書出しの実行要求






正解は、イです。

H28秋AP午前問30
問30 DBMSをシステム障害発生後に再立上げするとき,ロールフォワードすべきトランザクションとロールバックすべきトランザクションの組合せとして,適切なものはどれか。ここで,トランザクションの中で実行される処理内容は次のとおりとする。

トランザクション
データベースに対するRead回数とWrite回数
T1,T2
Read 10,Write 20
T3,T4
Read 100
T5,T6
Read 20,Write 10
28A-AP問30


ロールフォワードロールバック
T2,T5T6
T2,T5T3,T6
T1,T2,T5T6
T1,T2,T5T3,T6






T1は無事にチェックポイントを終えているので、ディスクのDBに反映済みです。何もする必要はありません。
T2とT5はコミットしているので、ロールフォワードしましょう。
T3、T4はReadだけなので、何もする必要はありません。
T6は、書き込みをしているので、整合性を保つためにも更新前情報でロールバックします。
正解は、アです。

1.データウェアハウス
・各種データベースの中から、意思決定に必要なデータを特別に収集した大規模データベース。
・ウェアハウス(Warehouse)は倉庫の意味
・運用中のデータとは別でデータを持つ。
・普通のDBを利用することもあるし、DWH専用のDBを利用することもある。

過去問(H26年秋IP)を見てみましょう。
問16 企業経営の意思決定を支援するために,目的別に編成された,時系列データの集まりを何というか。

ア データウェアハウス
イ データセンタ
ウ データフローダイアグラム
エ データマイニング





正解は,アのデータウェアハウスです。

過去問(H24秋AP)を見てみましょう。
問29 データウェアハウスに業務データを取り込むとき,データを抽出して加工し,データベースに書き出すツールはどれか。

ア ETLツール
イ OLAPツール 
ウ データマイニングツール
エ 統計ツール





正解は,アのETLツールです。

2.データマート
・データマートはデータウェアハウスの中から、各部門で必要なデータのみを抽出したもの。
小型のデータウェアハウスと思えば良い。
・データウェアハウスのデータそのものではなく、データを加工したりして、抽出しやすくなっている。
・マート(Mart)は市場を意味するので、倉庫(Warehouse)とスーパーマーケットみたいなイメージで考えればいいであろう。商品はデータである。
・過去問では、データマートに関する記述として「利用者が情報を利用するための目的別データベースであり、あらかじめ集計処理などを施しておくことによって検索時間を短縮する(H18AM問8)」と述べられている。

3.データマイニングツール
有用な法則を導く
過去問では、データマイニングツールに関する記述として「大量に蓄積されたデータに対して統計処理などを行い、法則性の発見を支援する(H18AM問8)」「大量に蓄積されているデータから、顧客購買行動の法則などを探し出す(SM平成17年問14)」と述べられている。キーワードは「大量のデータ」「法則」です。
具体的な例として、過去問(平成18年春AU午前問5)では、データマイニングの技術に関して、「"缶ビールを購入する顧客は,スナック菓子を同時に買い求める傾向にある"というような,データベースに蓄積された大量のデータを分析して,新たな情報を得る技術」と述べられています。

過去問(平成29年春期 午前 問30)を見てみましょう。
問30 ビッグデータの利用におけるデータマイニングを説明したものはどれか。

ア 蓄積されたデータを分析し,単なる検索だけでは分からない隠れた規則や相関関係を見つけ出すこと
イ データウェアハウスに格納されたデータの一部を,特定の用途や部門用に切り出して,データベースに格納すること
ウ データ処理の対象となる情報を基に規定した,データの構造,意味及び操作の枠組みのこと
エ データを複数のサーバに複製し,性能と可用性を向上させること





正解は、アです。

過去問(H26年秋AP午前)を見てみましょう。
問29 データマイニングの説明はどれか。
ア 検索効率を高めるために,大規模データベースの一部をあらかじめ用途に合わせて抽出し,データの要約などの加工をしておくこと
イ 大規模データベースから,統計や推論の手法を使って,意味のある情報を見つけ出すこと
ウ 大規模データベースにおけるスタースキーマを実装するのに適した,索引ファイルを作成すること
エ 大規模データベースにおけるメタデータを効率よく管理すること 





正解は、イです。

過去問(H24年春FE午前)を見てみましょう。
問64 企業が保有する顧客や市場などの膨大なデータから,有用な情報や関係を見つけ出す手法はどれか。

ア データウェアハウス
イ データディクショナリ
ウ データフローダイアグラム
エ データマイニング





正解は、エのデータマイニングです。

4.OLAP(online analytical processing)
Excelのピポットテーブルを想定すれば分かりやすい。大量のデータを色々な条件で検索、集計する。
以下、マイクロソフトのサイト「Office Excel 2003 データ入力/集計テクニック」
http://www.microsoft.com/japan/office/previous/2003/experience/workstyle/tips/excel/tips12.mspx

過去問では、OLAPに関する記述として「集計データを迅速かつ容易に表示するなど、利用者に対して様々な情報分析機能を提供する(H18AM問8)」と述べられている。

■ピボットテーブル
以下にサンプルとなるEXCELファイルもあって、分かりやすい説明がある。
https://www.forguncy.com/blog/20171110_pivottable
起動は「挿入」「ピボットテーブル」
たとえば、行に「販売日」、列に「商品」、値に「金額」
を入れると、2次元の分析ができる。自分でやってみると理解が進むと思う。わりと面白い。

----ドリルダウン、スライス、ダイス
OLAPに関して、解析の用語としては以下がある。
1)ドリルダウン:情報をドリルで掘り下げる。
例えば、月別の売り上げ情報が表示されている中で、売上の多い2月を分析。さらに、2月の土日の売上が多い。というように、情報を掘り下げていくこと。
2)スライス:「レモンをスライスする」ように、情報をスライスします。横で切ります。たとえば、年齢別で切ったり、地域別で切ったり。
3)ダイス:サイコロから来ているようです。Excelのピポットテーブルを思い浮かべてください。サイコロを転がすように(?)縦軸と横軸を変えて、目的の分析をします。
過去問では、ダイスに関する記述として「商品の販売状況分析を商品軸、販売チャネル軸、時間軸、顧客タイプ
軸で行う。データ集計の観点を、商品、販売チャネルごとから、商品、顧客タイプごとに切り替える操作(H18AM問8)」と述べられている。

5.メタデータ
過去問(H20年秋SW午前問37)では、「メタデータを説明したもの」として、「データの定義情報を記述したデータ」と述べられています。

6.データクレンジング
・データを正しい情報に直す。例えば、電話番号が003-1111-XXXXとあるのを、03-1111-XXXXとする。
・名寄せ。同一ユーザでも複数の登録があれば、ひとつにまとめる。

過去問(H27秋SC午前2)を見てみましょう。(H22秋AP問28と同じ)
問21 データウェアハウスを構築するために,業務システムごとに異なっているデータ属性やコード体系を統一する処理はどれか。

ア ダイス
イ データクレンジング
ウ ドリルダウン
エ ロールアップ





正解は,イのデータクレンジングです。

7.データディクショナリ
データディクショナリは、データベースの辞書(ディクショナリ)として機能し、DBMSが管理するデータや利用者、およびその関係などを保持します。データディクショナリの配置方法は、1カ所に配置する集中管理方式と各エリアなどに分けてに配置する分散管理方式があります。

過去問(H23特別FE午前 問35 )では、データディクショナリに関して、「DBMSが管理するデータ,利用者,プログラムに関する情報,及びそれらの間の関係を保持するデータの集合体」と述べられています。

過去問(H26秋AP午前)を見てみましょう。
問28 分散データベースシステムのデータディクショナリ/ディレクトリの配置方式に関する記述のうち,適切なものはどれか。
ア 集中管理方式では,データディクショナリ/ディレクトリを保有するサイトに負荷が集中することはない。
イ 集中管理方式では,データディクショナリ/ディレクトリを保有するサイトの障害が,分散データベースシステムの重大な障害になる。
ウ 分散管理方式で,各サイトにデータディクショナリ/ディレクトリを重複保有しない形態では,表の構造の変化が発生した場合,全てのサイトで内容を変更する必要がある。
エ 分散管理方式で,各サイトにデータディクショナリ/ディレクトリを重複保有する形態では,問合せに対して,他のサイトの内容を調べることがある。





正解は、イです。

過去問(H22春DB午前2)を見てみましょう。
問20 関係データベース管理システム(RDBMS)のデータディクショナリに格納されるものはどれか。

ア OSが管理するファイルの定義情報
イ スキーマの定義情報 
ウ 表の列データの組
エ 表の列に付けられたインデックスの内容





正解は、イの「スキーマの定義情報」です。

・stored(サーバに蓄えられた) procedure(手続きorプログラム)
・クライアントからSQL文などで要求を毎回送るのではなく、あらかじめサーバ側に一連のProcedure(プログラム)を作成しておく。クライアントからは値だけを送る。

・過去問(H25秋FE午前問28)ではストアドプロシージャに関して、「クライアントサーバシステムにおいて,利用頻度の高い命令群をあらかじめサーバ上のDBMSに用意しておくことによって,データベースアクセスのネットワーク負荷を軽減する仕組み」と述べられています。

効果は「通信回数と通信量の削減」

例えば、退職する社員の日割りの給料計算のために、以下の一連の処理をする場合を考えます。
・人事データベースから、その人の基本給および能力給を抽出
・1か月間の残業日数を集計
・売り上げ額の集計から、成果加算額を積算
・集計した給料をもとに、退職日に応じて日割りの金額を給料データベースに反映
・・・

1.通常のプログラムの場合
サーバクライアント

①SELECT kihon,nouryoku FROM jinji_db ****
②SELECT sum(zangyo) FROM kintai_db ****
②SELECT sum(uriage) FROM uriage_db ****
④UPDATE salary SET ****   
・・・・・             各処理

このように、各処理の回数だけ処理が必要


2.ストアドプロシージャを使った場合
サーバクライアント


ProcedureKyuryo、1023,1218,・・・




プロシージャ名と引数(この場合は、退職する社員の社員番号と退職日)を渡すだけで計算が終わります。クライアントとサーバでやり取りする命令が1回で済みますし、データ量も削減できます。

【関連問題】
SM平成18年問5
SM平成17年問5

H27年秋AP午前
問26 クライアントサーバシステムにおけるストアドプロシージヤに関する記述のうち,適切でないものはどれか。
ア 機密性が高いデータに対する処理を特定のプロシージヤ呼出しに限定することによって,セキュリティを向上させることができる。
イ システム全体に共通な処理をプロシージヤとして格納しておくことによって,処理の標準化を行うことができる。
ウ データベースへのアクセスを細かい単位でプロシージヤ化することによって,処理性能(スループット)を向上させることができる。
エ 複数のSQL文から成る手続を1回の呼出しで実行することによって,クライアントとサーバの間の通信回数を減らすことができる。
【正解】ウ

たくさんあるが、試験によく出るのは以下。

・複数の表から作成
・Group byを使用
・HAVINGを使用

↑このページのトップヘ