データベーススペシャリスト 平成10年度 午後�� 解答

問1
設問1
(1)a:BETWEEN '19920402' AND '19930401'
   b:OR
   c:IN
   d:会員番号
   e:販売実績
   f:年月日>='19970101'
   g:会員番号
   h:HAVING SUM(販売単価×販売個数)>=200000

(2)会員テーブルを正規化し、家族氏名1〜カード発行有無6の部分を会員家族テーブル
   (会員番号,通番,家族氏名,性別,生年月日,カード発行有無)として分割する。


設問2
(1)会員番号,更新日

(2)a:会員番号 A,会員番号 B
   b:A.都道府県<>B.都道府県 AND A.会員番号=B.会員番号

(3)DISTINCT句を追加して会員番号の重複を避ける

問2
設問1
 売上明細.書籍コード


設問2
 126秒

 ※解説
  外側ループ:売上明細 販売年月="199803"は2400000/12=200000件
             必要ブロック数=200000件/40件=5000ブロック
  内側ループ:書籍   分類="ミステリ"は900件
             必要ブロック数=900件/20件=45ブロック
  I/O計算
  外側ループでのバッファリング5000回×1ブロック
            +
  内側ループでのバッファリング1回×45ブロック  ※1回のバッファリングで使いまわせる
  (5000+45)×25=126125ミリ秒=126秒


設問3
(1)内側ループのデータ量がI/Oバッファより大きいため、外側ループに対して毎回バッファリングをする必要が
   生じ、I/Oが多発するため。

(2)外側用I/Oバッファを50ブロックとし、内側用I/Oバッファを1とする。

 ※解説
  外側ループ:売上明細 販売年月="199803"は2400000/12=200000件
             必要ブロック数=200000件/40件=5000ブロック
  内側ループ:書籍   分類="エッセイ"は1100件
             必要ブロック数=1100件/20件=55ブロック
  I/O計算
  外側ループでのバッファリング5000回×1ブロック
            +
  内側ループでのバッファリング(1回×50)+(1回×5)ブロック×5000回
  (5000+5000×55)×25=7000000ミリ秒=7000秒

問3
設問1
(1)┌──────────┐
   │┌────────┐│
   ││┌──────┐││   ┌─────┐
   │││ 患者番号 │├┼──→│処方年月日│
   ││└──────┘││   └─────┘
   ││┌──────┐││
   │││ 医師番号 │││   ┌────┐
   ││└──────┘│├──→│用法用量│
   │└────────┘│   └────┘
   │ ┌──────┐ │   ┌────┐
   │ │医薬品コード│ ├──→│ 分量 │
   │ └──────┘ │   └────┘
   └──────────┘

(2){患者番号,医師番号}→治療名→治療区分


設問2
(1){患者番号,入院日}
   {患者番号,退院日}

(2)違う
   {患者番号,入院日}→{患者番号,診療科}→カルテ番号という推移的関数従属が存在する


設問3
(1)同じ患者が同じ診療科に再入院する際に{患者番号,診療科}→カルテ番号が冗長

(2)治療 (患者番号,医師番号,治療コード,処置日時)
   治療法(治療コード,治療名,治療区分)

問4
設問1
(1)更新後のデータをトランザクションログに書き出す。

(2)   READ  WRITE
   最小:0回  2回
   最大:2回  4回

  ※解説
  最小:READは全てキャッシュから。WRITEは(4)(6)。
  最大:READ は(1)(2)。WRITE は(3)(4)(5)(6)。


設問2
(1)オンライン処理においてDF041Dへの物理入力が多すぎる

  ※解説
       │ オンラインIN │ オンラインOUT│ バッチ処理IN │ バッチ処理OUT│
  ─────┼─────────┼─────────┼─────────┼─────────┼
  テーブルA│530004/756000 =0.7│12588/36000=0.35 │86321/162000=0.5 │41587/120000=0.3 │
  テーブルB│694215/1152000=0.6│325511/720000=0.45│150877/1632000=0.1│72985/720000=0.1 │
  テーブルC│302851/756000 =0.4│3852/3600=1.07  │48658/120000=0.4 │12085/120000=0.1 │
  テーブルD│973658/720000 =1.4│0         │0         │0         │

(2)メモリの空き状況とコードテーブルへのSQLの記述を調査


設問3
(1)ディスクI/Oの競合回避および負荷分散

(2)TR001

問5
設問1
(1)非候補キー“タイトル名”が候補キーの一部である“タイトル番号”に部分関数従属するため。

(2)タイトル
  ┌──────┬─────┬──────┬──────┬────┬────┐
  │タイトル番号│タイトル名│貸出開始日付│旧作指定日付│ジャンル│新旧区分│
  |──────|     |      |      |    |    |
  └──────┴─────┴──────┴──────┴────┴────┘
  貸出用ビデオ
  ┌───┬──────┬────┬───┐
  │店番号|タイトル番号│初期本数│現本数│
  |───|──────|    |   |
  └───┴──────┴────┴───┘


設問2
(1)同タイトルのどのビデオが返却されたか対応が取れなくなる

(2)タイトル内通番


設問3
  貸出状況推移
 ┌──────┬────┬─────┐
 │タイトル番号│経過日時│貸出残本数│
 |──────|────│     │
 └──────┴────┴─────┘