データベーススペシャリスト体験記

f:id:usagisagi:20171015163057p:plain

データベーススペシャリストを受けてきたのでそのメモです。

経歴

  • 社会人経験4年
  • 薬系理系修士
  • 非IT系企業
  • DBの経験はテーブルを眺める程度
  • 資格は応用情報

使った参考書

www.amazon.co.jp

色々買いましたが、振り返ってみるとこれ1つで済みました。過去問の解説が(他のものと比べて)量質共に非常に優れています。参考書部分も無駄がない。 ただ解答用紙が狭いので、iTECからDLするとよいと思います。

他参考書は、スタディワールドの教科書、SQLドリル、リレーショナルデータベース入門、データベース設計の参考書などを買いましたが不要でした。

勉強方法

午前2

過去問道場でひたすら演習です。ただ、データベースだけでなく他分野も無視できない分量が出ますので、余裕があれば応用情報の復習をしとくとなお安心です。特にセキュリティはケアしとくと良いと思います。

午後1

過去問でひたすら演習。H28~H16あたりまで2回は回しました。

ネット見てますと「SQLは捨てる」とかよくありますが、私はよほどの事情が無い限りどの分野も勉強した方がよいと思います。今回もSQLは問2問3両方出ており避けられません。といってもSQLは参考書を全てカバーする必要はなく、DMLのSELECT文を勉強すれば十分です。

後午後2以上に時間が足りなくなりがちです。午後1だからといってあまり甘く見ないことです。

午後2

これも過去問でひたすら演習。H28~H16あたりまで2回は回しました。

最初はあまりの分量に辟易しましたが、ネテロよろしく量をこなす毎に読むスピードが速くなり、最後のあたりは逆に楽しかったです。午後2は実務経験がないと全く歯が立たないと聞いていたので怖かったですが、実際はそんなことはなく過去問演習で十分にカバーできる範囲だと思います。

以下に概念設計問題の簡単なコツを示します。

  • 最初に問題・見出しを見て全体の構成を頭に入れる。但し、途中で要件変更等があっても必要以上に怖がらず、最初から読む。
  • 問題文中のE-R図を用いて、今読んでいるところはどこかを常に頭に入れる。迷子にならないよう常に気を付ける。
  • E-R図中のリレーションが表す関係は何か、テーブルが表す単位は何かを常に考える。本文中の『各』や『毎』などは大ヒント。
  • 候補キーは何かを意識する。『ID』や『番号』は最重要。
  • よく出るパターンを身につけておく。『ヘッダ』-『明細』、『履歴管理』など。よく出るパターンは先述の参考書にも載っていますし、過去問演習をしていけば次第に慣れると思います。
  • 設問ですでに記入されている"暗黙のルール"には必ず従う。属性の命名やサブタイプ分割で迷うときはこの"暗黙のルール"に従うといける場合が多いです。私が受けた2017春午後2はその典型例だと思います。
  • 諦めない。読み進めていくうちに設問のデータベースの"勝手"が分かってきますので読むスピードはどんどん上がっていきます。たとえ、最初の1Pを読むのに20分程度かかったとしても十分間に合います。

感想

本試験では、午後1は問1,3を選択して2回見直すことが出来、問2を選択した午後2も十分に見直す時間が取れました。結果は午後で90点を超え、非常に満足できる結果でした。

実務でも試験で身に着けたスキルは役に立っています。応用情報では知識として頭に入っていれば何とかなりましたが、デスペでは使えるようになるまで反復練習をするので実務でもある程度使えるレベルまで引き上げられたと思います。名だたる大企業でも多対多のデータモデル図を平気で出してくるんですね……。でも私口出す立場にないからしーらないっ。

今後

システム監査技術者に特攻します。

pythonのcgi moduleのめも

社内でpython製のものをデモするために簡単なcgiを作ろうとしたら、意外と引っかかったのでメモ。

cgi.FieldStorage() → 辞書型

postやgetを受けるcgi.FieldStorage()は、辞書型のようで辞書型でなく、バグの温床になりそうなので変換して使う。

import cgi
form = cgi.FieldStorage()
form_dict={}
for key in form.keys():
    form_dict[key] = form.getvalue(key)

cgi.FieldStorage() のエンコード指定

cgi.FieldStorage(encording='utf-8')

webは何があるか分からないのでencodeを指定する

<input type=“checkbox”>の判定

チェックが入るとcgi.FieldStorage()["key"].valueにstring型で'on'と入る。チェックがないときはcgi.FieldStorage()にキー自体が無い。
ただ、仮に'off'とかが入ってくると怖いので、strの'on'に等しいかで判定する。

tmpフォルダ

matlabplot.pyplotなどで一時ファイルを使うとき、cgi-bin直下にtmpフォルダを作ると権限の関係でうまく動かない。tmpフォルダはcgi-binと同階層に置くこと。
後、一時ファイルを作成した後は、使う前にos.chmod等で権限を付与することも忘れない。

shphinxを使ってPythonのコードからAPIドキュメント作成

無駄に苦労したのでメモ

  • shphinxのquick_start
  • コマンドsphinx-apidoc -f -o [出力フォルダ] [srcフォルダ]
  • 20行目あたりの以下のコメントアウトを外し、sys.path.insertの表記を[srcフォルダ] へのパスにする

# import sys
# import os

# sys.path.insert(0, os.path.abspath('.'))

import sys
import os

sys.path.insert(0, os.path.abspath('[srcDirectoryPath]'))
  • extensionsの値を ["sphinx.ext.autodoc"]
  • コマンドsphinx-build -b html [conf.pyのフォルダ] [ビルド先フォルダ]

おまけ


というかここがわかりやすかったので参考

bonbonbe.hatenablog.com

Juman++をUbuntu(Anaconda)にインストール

無駄に苦労したのでメモ

  • Juman++をDL
    これは研究室のHPにいってその通りにすればいい。

これをPythonから使うにはラッパーのpyknpが必要だが、このpyknpはJuman(無印)とKNPに依存している。更に面倒なことにKNPはJuman(無印)に依存している。ので、次の順番でインストールを行う。

  • Juman(無印)をDLしてインストール
  • KNPをDLしてインストール
  • pyknpをDLしてインストール

最後のpyknpは素直にsudo python setup.py installを叩いても、Anacondaのpythonにインストールされない。condaのディストリビューションもない。そこでpipを使ってこうする。  

pip install ./pyknp-0.3(setup.pyがあるフォルダ)

所要時間は3時間程度。お疲れさまでした。

Visual Studio 2015 Express 日本語版

いくら探してもVisual Studio 2015 Expressの日本語を探しているが見つからなかったので情報共有。
なんとURLを直接弄る必要があるらしい

d.hatena.ne.jp

あまりにも見つからないのであきらめて英語版で開発してた。
それにしてもMSは一体何を考えているんだ。

文字列の括弧をなんやかんやする

背景

練習がてら、文字列の括弧をなんやかんやするやつを作った。
ちょっと他所で使いそうなのでVBAで作った。

コード

Function Scan(St As String, h As Integer) As Variant()
'####################################################
'引数
'String:パーサ対象文字(250くらいまで)
'h :最大階層数
'返却値
'variant():二次元配列で(string, integer)
'例:(hoge(foo(piyo))hoge, 1) → (hoge,0) , (foo(piyo),1), (hoge,0)
'################################q###################

    'かっこがない時はそのまま返しておしまい
    If InStr(1, St, "(") = 0 And InStr(1, St, ")") = 0 Then
        Dim Arr_R2(1, 0) As Variant
        Arr_R2(0, 0) = St
        Arr_R2(1, 0) = 0
        Scan = Arr_R2
        Exit Function
    End If
    
    Dim i As Integer
    Dim buf_St As String: buf_St = ""   'キャッシュ
    
    Dim Buf_arr() As String '保存用
    ReDim Buf_arr(1, Len(St) - 1) '(0, n):開始文字、(1, n);それまでの階層
    '動的に要素数を決めるべきなんだろうけど面倒になった
    
    Dim buf As String   '参照文字列
    Dim q As Integer: q = 0 'ポインタ
    Dim hn As Integer: hn = 0 '階層

    For i = 1 To Len(St)
        buf = Mid(St, i, 1)
        
        If buf = "(" Then
            If hn < h And Len(buf_St) > 0 Then
                'hn => h の時はstackされない
                '各階層でつなげる必要はないのでpopもしちゃう
                Buf_arr(0, q) = buf_St
                Buf_arr(1, q) = hn
                buf_St = "": q = q + 1
            End If
            hn = hn + 1
        ElseIf buf = ")" Then
            If hn <= h And Len(buf_St) > 0 Then
                Buf_arr(0, q) = buf_St
                Buf_arr(1, q) = hn
                buf_St = "": q = q + 1
            End If
            hn = hn - 1
        End If
    
        '判定するの面倒だから手癖でやった
        If (hn > h Or Not buf = "(") And (hn >= h Or Not buf = ")") Then buf_St = buf_St & buf
    Next i
    
    'キャッシュ掃き出し
    Buf_arr(0, q) = buf_St
    Buf_arr(1, q) = 0
    
    '値が入っている要素の最大値を取る
    q = 0
    Do While Len(Buf_arr(0, q)) > 0
        q = q + 1
    Loop
    
    '返却用
    Dim Arr_R() As Variant
    ReDim Arr_R(1, q - 1)
    For i = 0 To q - 1
        Arr_R(0, i) = Buf_arr(0, i)
        Arr_R(1, i) = Val(Buf_arr(1, i))
    Next
    
    Scan = Arr_R
    
End Function

総括

いつも他人のVBAに文句言っているけど自分も大概。
それでもVBAは悪い文明。

Excelを閉じる時にセルをA1に合わせるVBA

背景

エクセルを閉じる時にシートの全セルを"A1"に合わせる文化があります。私もこれを忘れて何度か怒鳴られたこと(全て社内から)があります。
この日本の美徳を忘れずに実行するため、Excelを閉じる時に全てのシートについてセル"A1"を選択するVBAを作りましたのでご査収下さい。

コード

Private Sub Auto_Close()

On Error GoTo Err
  Dim i
  For i = 1 To Worksheets.Count
    Worksheets(i).Activate
    Worksheets(i).Cells(1, 1).Select
    DoEvents
  Next
  
  Worksheets(1).Activate

  Exit Sub
Err:
End Sub

使い方は適当なExcelファイルのプロシージャに上記コードを突っ込んでアドインで保存。その後保存したアドインを適用。
閉じる時に「上書き保存しますか?」っていう確認が出ない場合A1に合わせて保存されないのでそこだけ注意。気に入らなかったら適当に変えて下さい。
他に不具合があったら適当にお願いいたします。教えて下さるとありがたいです。

総括

くたばれワープロExcel