DB勉強会レポート_2019年01月15日(火)実施分【前編】|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。Tips勉強会2019.02.06DB勉強会レポート_2019年01月15日(火)実施分【前編】Oasist&シェアツイートブックマークLINEこんにちは。今回は内容が盛り沢山なので、前編と後編に分割します。(3)作業W4(追加制約設計)に関する表4の索引について、1、2に答えよ。実際に問題を解く前に、設問に関する情報を問題文中から探し整理していきましょう。実線の下線は主キーを表しています。網掛け部分は表示していない。当日の現在日付が設定される。各DMLを日本語に直すと以下の通りです。それぞれのホスト変数と一致する施設IDと鍵番号を持つ行を鍵テーブルから選択し、鍵番号を射影する。それぞれのホスト変数と一致する施設IDと鍵番号を持ちなおかつ未精算フラグが’Y’の行を店舗利用テーブルから選択し、利用年月日(ホスト変数)、利用時刻、施設ID、券番号(ホスト変数)、店舗ID、利用額、ポイント数列を射影して精算明細テーブルに挿入する。それぞれのホスト変数と一致する利用年月日、施設ID、券番号を持つ行を精算明細テーブルから選択する。DDL、DML、DCLの定義や区別をお忘れの方は逆引きSQL構文集でおさらいしておきましょう。ユニーク制約又は非ユニーク制約のどちらに該当するか答えよ。「ユニーク制約」と「非ユニーク制約」とは何かが分からなければ問題に答えられないので、定義を確認しておきましょう。Centerによると、それぞれ以下のように定義されています。つの行が同一のキー値を持たないようにすることによりデータ整合性の維持に貢献する索引です。データが入っている既存の表にユニーク索引を作成する場合、索引キーを構成する列または式の値について固有性がチェックされます。キー値が重複する行を含む表では、索引の作成処理が失敗します。表にユニーク索引を定義した場合、索引内でキーが追加または変更されるときには必ず、固有性が強制されます。強制される操作の例をいくつか挙げると、挿入、更新、ロード、インポート、整合性の設定などがあります。(一部省略)非ユニーク索引は、その索引が関連付けられる表に対して制約を適用するために使用されることはありません。その代わり、非ユニーク索引は、頻繁に使用されるデータ値のソート順序を維持することにより照会のパフォーマンスを改善するためだけに使用されます。Centerより引用まとめると以下の通りになります。施設内のロッカーを識別する番号。客の精算後、鍵は再利用される。利用額が未精算の場合:’Y’精算済みの場合:’N’ここで、具体的なシナリオを考えてみましょう。ある日、Aさん、BさんCさんが施設を利用しました。Aさん、Bさんは既に精算済みで、三人はたまたま入れ替わりで同じロッカーの鍵番号を渡されました。施設内の店舗で商品を購入するごとに、店舗利用テーブルには例えば以下のような行が追加されます。一行目をAさん、二行目をBさん、三行目をCさんとします。キーの意味・制約を見ると、「客の精算後、鍵は再利用される。」とあり、ある客の未精算フラグが’N’であれば、他の客が同じ鍵番号を利用出来ますので、キー値が重複しても問題ありません。よって、上記のように違う客が施設ID、鍵番号、未精算フラグにおいて同一のキー値を持つことが出来ますので、ユニーク索引を設定することは出来ません。よって、非ユニーク索引が正解となります。ちなみに、非ユニーク索引設定のために実行されるDDLは以下の通りです。索引2は高クラスタな索引である。その理由を35字以内で答えよ。問題文にある高クラスタ・低クラスタの説明を確認しましょう。隣接するキーが指す行が同じページに格納されている割合が高い。行へのアクセスがランダムになる。ここで、ページという用語が登場しました。XTECHでは、図とともに以下のように解説されています。ページはRDBMSがディスク領域を管理する際に基本となる単位で...(一部省略)テーブルを構成するレコードや,インデックスのエントリを複数格納します。RDBMSはメモリーとディスクの間の入出力をページ単位で管理し,キャッシュ・バッファへの入出力もページごとに行います。(一部省略)ページ・サイズの決定は,RDBMSのパフォーマンスに影響を与えます。扱うデータやアクセスの特性に合わせて決める必要があります。1回の入出力で扱う平均的なデータ量が少ない場合には,ページ・サイズが小さいほうが有利です。レコードを一つだけ読み込めばいいような場合でも,ページ全体を読み込むことになり無駄が多くなるからです。1回の入出力で扱うデータ量が多い場合は,ページ・サイズを大きくしたほうが良いでしょう。ページ・サイズが小さいとディスクとの入出力の回数が増えて,効率が悪くなります。上の図を見ながらイメージしてみて下さい。探索対象の複数の行が規則正しく同じページに格納されていたら、ページへのアクセスはごく少なくて済みます。この状態を問題文で「高クラスタ」と定義されています。反対に、お目当の行がバラバラのページに不規則に格納されていたら、ページにランダムにアクセスしなければなりません。この状態を「低クラスタ」と定義されています。この設問では、何故索引2は高クラスタなのかを聞いています。利用額の精算時に実行されるDMLの例を見て下さい。DML3でSELECT文を使って探索される精算明細テーブルの行は、DML2に挿入されるのが分かります。(4)」に大きなヒントが書かれています。レジに記録されたデータは、客が精算するまでにシステムのデータベースに送られる。ここでのレジは店舗利用テーブル、システムのデータベースは精算明細テーブルを指しています。券番号111を持つ客が、施設内の店舗内で色々な商品をバラバラのタイミングで購入したとしましょう。券番号111に紐づいたデータは、精算時までに「まとめて」精算明細テーブルに追加されます。100このように追加されれば、同じページにレコードがまとまって存在することになり、「高クラスタ」な状態になります。よって、「同じ券番号の行が精算時にまとめて追加されるから」が解答になります。(4)は後編に続きます。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。