データベーススペシャリスト勉強会スライド

29
Session by Shinnosuke Akita 2015.01.24 デデデデデデデデデデデデデデデデ デデデ デデデ ~1~

Upload: shinnosuke-akita

Post on 31-Jul-2015

165 views

Category:

Technology


0 download

TRANSCRIPT

Session by Shinnosuke Akita

2015.01.24

データベーススペシャリスト勉強会~午後1攻略~

Self IntroductionShinnosuke Akita

・ Oracle DBA をやっています。・ 今の現場は DB 設計もやっています。・ 休日はランニングと家族サービス・ たまに小説も書いたり、勉強会にでかけたり・ 大衆酒場めぐりがマイブーム

Today’s Agenda

・まずはウォーミングアップ

・午後1問題攻略(データベース基礎理論)

 午前2 問題と回答 出題の傾向(時間のない方向け!)

 正規化問題の攻略法 ディスカッション及び回答発表

ウォーミングアップ問1:“社員”表から、役割名がプログラマである社員が3名以上所属している部門の部門名を取得する SQL 文はどれか。 社員(社員番号、部門名、社員名、役割名)

ア  SELECT  部門名  FROM  社員    GROUP BY  部門名    HAVING COUNT(*)  >= 3    WHERE  役割名 = ‘プログラマ’イ  SELECT  部門名  FROM  社員    WHERE COUNT(*)>= 3  AND  役割名 = ‘プログラマ’    GROUP BY  部門名ウ  SELECT  部門名  FROM  社員    WHERE COUNT(*)>= 3    GROUP BY  部門名    HAVING  役割名 = ‘プログラマ’エ  SELECT  部門名  FROM  社員    WHERE  役割名 = ‘プログラマ’    GROUP BY  部門名    HAVING COUNT(*)  >= 3

ウォーミングアップ答1:エ

SQL 文の記述順は以下の通り SELECT  列名  FROM  表名   WHERE  条件式   GROUP BY  グルーピングする単位   HAVING  グループ化したデータの絞り込み

(平成25・午前2 問5)

ウォーミングアップ問2:2相コミットで分散トランザクションの原始性を保証する場合、ネットワーク障害の発生によって参加者のトランザクションが、コミットすべきかロールバックすべきかを判断できなくなることがある。このような状況を発生させるネットワーク障害に関する説明として、適切なものはどれか。

ア 調停者のトランザクションが、コミット又はロールバック可否の問い合わせを参加者に送る直前に障害になった。イ 調停者のトランザクションが、コミット又はロールバックの決定を参加者に送る直前に障害になった。ウ 調停者のトランザクションが、コミット又はロールバック可否の応答を参加者に返す直前に障害になった。エ 調停者のトランザクションが、コミット又はロールバック完了を参加者が返す直前に障害になった。

ウォーミングアップ答2:イ

 (平成25・午前2 問13)

2相コミットプロトコルでは、まず処理全体を管理する調停者が、参加者に対し、コミットが行えるか問い合わせ、全ての参加者から「準備完了」の応答があったら、調停者は改めて各参加者にコミットを行うことを要求し、コミットが行われます。問い合わせの準備完了がされる前に応答が返ってこなければ実施しない判断ができるため、アとウは誤り。コミットの完了後であれば、各参加者はコミットが終わっているため、エは誤り。イのパターンは、各参加者は調停者のコミット決定が受け取れないため、イが正解となります。

ウォーミングアップ問3:トランザクションの隔離性水準のうち、次の (1) 、(2) に該当する SQL の指定はどれか。

(1) 対象の表のダーティーリードは回避できる。(2) 一つのトランザクション中で、対象の表のある行を2回以上参照する場合、1回目の読み込みの列値と2回目以降の読み込みの列値が同じであることが保証できない。

ア  READ COMMITTED   イ  READ UNCOMITTEDウ  REPEATABLE READ   エ  SERIALAIZABLE

ウォーミングアップ答3トランザクションの隔離性から外れた不都合な読み込みは以下の3種類が存在する。ダーティーリード    別のトランザクションでコミットされていないデータが            読み取れるノンリピータブルリード 別のトランザクションで更新後データを読むことにより            一貫性がなくなるファントムリード    別のトランザクションで挿入されたデータが見えることに            より一貫性がなくなる

※隔離性が高まるとパフォーマンスは下がるので、隔離性が高ければいいとも言い切れない。

設問からはダーティーリードは発生しないが、ノンリピータブルリードは発生すると読み取れる。

ウォーミングアップ読み込み現象とトランザクション分離レベルの関係は以下の表であらわされる。

(平成25・午前2 問9)

ダーティリード ノンリピータブルリード

ファントムリード

READ UNCOMMITTED 発生する 発生する 発生する

READ COMMITTED 発生しない 発生する 発生する

REPEATABLE READ 発生しない 発生しない 発生する

SERIALIZABLE 発生しない 発生しない 発生しない

ウォーミングアップ問4:関係R と Sにおいて、 R÷S の関係演算結果として適切なものはどれか。ここで、 ÷ は除算を表す。

店 商品

A a

A b

B a

B b

B c

C c

D c

D d

E d

E e

R S商品

a

b

c

ア商品

A

A

B

B

B

C

D

イ商品

A

B

C

D

ウ商品

B

エ商品

E

ウォーミングアップ答4:ウ関係の除算を行う際は、除算される属性(商品)のすべてのタプルが存在するもののみが残る。

店 商品

A a

A b

B a

B b

B c

C c

D c

D d

E d

E e

R

ウォーミングアップ問5:データモデリングの過程で、二つのエンティティ間に多対多の対応が生じた。これを関係データベース上に実装する場合、二つのエンティティを表として定義した上で、多対多の対応を表す方策はどれか。

ア それぞれの表の主キーに対して明示的にインデックスを定義する。イ それぞれの表の主キーへの部分関数従属性を排除するように表を分解する。ウ それぞれの表の属性間の推移的な関数従属性を排除するように表を分解する。エ それぞれの表を参照する外部キーの組合せを主キーの一部とする表を新たに定義する。

ウォーミングアップ答5:エ

多対多の関係になった場合は、それぞれの表の主キーを組み合わせを別表で作成することで対応します。アは、インデックスではデータモデルの変更ができないため不正解。イ、ウは正規化の方法ですが、正規化ではそれぞれの表の主キーの関係は変わらないため不正解。

(平成25・午前2 問3)

ウォーミングアップ問6: WAL(Write Ahead Log) プロトコルの目的に関する説明のうち、適切なものはどれか。

ア 実行中のトランザクションを一時停止させることなく、チェックポイント処理を可能にする。イ デッドロック状態になっているトランザクションの検出を可能にする。ウ 何らかの理由で DBMS が停止しても、コミット済みであるがデータベースに書き込まれていない更新データの回復を可能にする。エ ログを格納する記憶媒体に障害が発生しても、データベースのデータ更新を可能にする。

ウォーミングアップ答6:ウ

WAL ( WriteAheadLog )は、ログ先行書き込みのことです。データベースの処理前にログに書き込むことにより、処理中に電源断などが発生してもログを確認することでどこまで処理が進んでいるかをデータベースが確認することができる。

(平成25・午前2 問18)

ウォーミングアップ問7:“社員” 表から、男女それぞれの最年長社員を除くすべての社員を取り出す 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. 性別

ウォーミングアップ答7:ウ

アは、副問い合わせ部分に性別ごとの最年長社員が入るため、男女どちらかの最年長社員が出力されるため不正解。イは、条件式が OR で結ばれているため、アと同様の現象が発生するため不正解。 AND であれば正解。ウは正解。メインの SQL の性別と同じであることを条件にしている。エは、 S2 が副問い合わせの FROM句にないため、エラーとなる。

(平成23・午前2 問11)

ウォーミングアップ問8:次の SQL 文によって” 会員” 表から新たに得られる表はどれか。

[SQL] SELECT AVG(年齢 ) FROM 会員 GROUP BY グループ HAVING COUNT(*) > 1

会員番号 年齢 グループ

001 20 B

002 30 C

003 60 A

004 40 C

005 40 B

006 50 C

AVG(年齢 )

36

AVG(年齢 )

40

AVG(年齢 )

30

40

AVG(年齢 )

60

30

40

ア イ ウ エ

ウォーミングアップ答8:ウ

「グループ」ごとにグルーピングされ、 HAVING句で「グループ」の件数が1より大きいことが指定されています。これを満たすグループは、 Bと C になります。これを満たす解答はウのみです。Bと C の AVG をそれぞれ計算すると、 Bは 30 、 C は40 ですので、ウの解答と合致しています。

(平成23・午前2 問6)

小休止

午後 1 問題攻略

設問 問題内容 主な設問

1 データベース基礎理論 正規化理論、 ER図作成など

2 テーブル設計 テーブル設計、再設計

3 SQL SQL 、インデックスの絞り込み率など

午後1は 3問中 2問を選択し、解答時間は 90 分である。

今日は設問1のデータベース基礎理論について、問題を解いていく。

正規化のおさらい問:

・アイドルグル―プ A 社アイドルグループを全国展開する A 社は東京、名古屋、大阪、福岡にグループを有し、グループ内にアイドルは複数所属している。また、所属するアイドルは複数兼任することもある。

・握手会握手会はそれぞれのグループごとに会場を借りて握手会を実施している。グループが開催する握手会は1日1回であり、複数のグループが同日に握手会を実施することがある。参加者は、別途購入または特典で入手できる握手券の数に応じて複数のアイドルと複数回握手をすることができる。複数のグループが同じ会場を使用することはない。

正規化のおさらいアイドルファン N は、多くの握手会に参加し、アイドルと握手を行い、参加した感想をブログに記載するためにテーブル設計を行った。

握手会評価(日付、グループ名、アイドル名、回次、握手会会場コード、      握手会会場名、握手会開催県コード、握手会会場県、      会場電話番号、評価、寸評)

エンティティの説明回次:1人のアイドルに複数回握手をすることを考慮し、順に数を振る評価:そっけない対応をした順に 塩、悪、普、良、神の5段階評価をする寸評:30文字程度の簡単な完走

正規化のおさらいアイドルだけではグループ名は一意にならないため、候補キーとなるのは、(日付、グループ名、アイドル、回次)です。このうち、会場は日付とグループに対して一意であることから、部分関数従属であると言えます。

日付 グループ名 アイドル名

会場コード

回次 会場名 会場県 評価 寸評

1/ 4 博多 差原 401 1 福岡国際センター

40 普 疲れている様子

1/11 東京 嶋崎 103 1 幕張メッセ 12 塩 片手で握手

1/11 東京 嶋崎 103 2 幕張メッセ 12 塩 顔すら上げない

1/11 東京 岩楯 103 1 幕張メッセ 12 良 笑顔で見送り

1/24 名古屋 松居 202 1 ナゴヤドーム 23 神 話が盛り上がって

日付

名グループ

名アイドル

回次

会場コード

正規化のおさらい第1正規化→第2正規化

日付 グループ名 アイドル名

会場コード

回次 会場名 会場県 評価 寸評

1/ 4 博多 差原 401 1 福岡国際センター

40 普 疲れている様子

1/11 東京 嶋崎 103 1 幕張メッセ 12 塩 片手で握手

1/11 東京 嶋崎 103 2 幕張メッセ 12 塩 顔すら上げない

1/11 東京 岩楯 103 1 幕張メッセ 12 良 笑顔で見送り

1/24 名古屋 松居 202 1 ナゴヤドーム 23 神 話が盛り上がって

日付 グループ名

アイドル名 回次 会場コード

評価 寸評

1/ 4 博多 差原 1 401 普 疲れている様子

1/11 東京 嶋崎 1 103 塩 片手で握手

1/11 東京 嶋崎 2 103 塩 顔すら上げない

1/11 東京 岩楯 1 103 良 笑顔で見送り

1/24 名古屋 松居 1 202 神 話が盛り上がって

会場コード

会場名 会場県

103 幕張メッセ 12

202 ナゴヤドーム 23

401 福岡国際センター

40

正規化のおさらい会場テーブルに注目すると、会場コードを候補キーとし、会場名、会場県コード、会場県がエンティティとしてあります。このなかで、会場コードが決定すれば会場県コードが決定しますが、会場県コードと会場県の組み合わせは一意であることがわかります。このような状態を推移的関数従属と言います。

日付

名グループ

名アイドル

回次

会場コード

会場コード 会場名 会場県コード

会場県

103 幕張メッセ 12 千葉

202 ナゴヤドーム 23 愛知

401 福岡国際センター 40 福岡

会場県コード

正規化のおさらい第2正規化→第3正規化

会場コード

会場名 会場県

103 幕張メッセ 12

202 ナゴヤドーム 23

401 福岡国際センター

40

会場コード 会場名 会場県コード

会場県

103 幕張メッセ 12 千葉

202 ナゴヤドーム 23 愛知

401 福岡国際センター 40 福岡

会場県コード

会場県

12 千葉

23 愛知

40 福岡

それでは、問題を解いてみましょう!