エンジニアが発信する【その他DBMS】の記事を集めました

エンジニアが作る最新ITブログ トップ>エンジニアの発信する【その他DBMS】

2011年10月25日

説明力とシステム設計能力

最近僕が悩んでいるのが、メンバーの教育。
前にディスカッションに関して書いたのもその一つ。

技術力を身につけるのはある程度容易であり、チャレンジさせてくれる会社に居ればある程度学べる。しかし、システムを作るとなると違う。これをどう身につけてもらうかが僕の悩み。
例えばシステムを作る際にデータベース設計って凄く基本だけど、この基本がとても難しい。アジャイルチックに一つ一つの機能をイテレーションして作って行っても良いのだが、データベース設計は後で変更が効き難いためイテレーションでまわす為には相当なスキルが必要。ある程度の規模のシステムが出来た後に

じゃぁ、こういう統計データをとって!

とか言われた時に、統計に合ったデータを収集してなければあらゆるテーブルから必要な情報を集めるバッチを作ったり今の処理を変えない為に既存テーブルに近い構成の統計用のテーブルを用意したりする事がある。
そう考えると、この基本的なテーブル設計がシステムの全てを司るといっても過言ではない。(DB、NoSQL、memcache、solr...と言う具合うにデータの一元管理が出来ずにミドルウェアが増えてきた時には要注意)


で、この能力を育てるのはどうすれば良いのだろうか?というのが僕の悩み。
今考えているのが、表題にある説明力。
人に上手く説明できる能力って、人の事を良く見て考えれる人だと思ってる。その理由は聞く人の事を考えれない人は説明能力もたかが知れている。また、説明する為にはある程度自分の中で知識を体系化して話せる必要がある。
という事は、この能力を昇華させてシステムに対してプログラムやテーブル設計をする場合はシステムの事を考えてやってくれるのではないかなー。と思ってる。
まぁ、これだけではないんだけど。

僕としてはこの能力が高いとコードレビューが楽になるなーと思ってる。
僕と一緒に働いているメンバーのコードがたまに難解なコードを書いてくるんだけど、大抵はコードが纏まってないだけで資料をまとめてもらうと資料が纏まらず。そういうときはコードのレベルがまだ未熟で改良の余地がある場合が多い。
だから、だから、この説明力を育てる事が良いシステムを作る第一歩なんだろうな。

P.S.
ちなみに、最近思うんだけど。フレームワークとかってとっても良いんだけど。ルールとかってとても良いんだけど。誰が入ってきても作れるような体制って実は一番未熟な組織構成な気がする。一人一人が考えて作れる組織に育てる事が重要なんじゃないかな。
誰が入ってきても作れるプログラムなら、仕様を考える人にプログラムを書かせれば良いんだよ。今のプログラム言語をそれなりのアーキテクトが組み立てれば不可能な事ではないと思うんだ。僕にはそこまでの力は無いけど、僕は仕様策定者が決めたいと思われる部分はYMLで外に出す事によって細かい打ち合わせを無くしてる。
  • なうで紹介
  • mixiチェック
  • ツイートする

2011年10月21日

バージョン間の罠

SQL Server の環境をそのままバックアップまたはオフラインしたものをコピーし、別の環境に移す際に、バージョンの違いが問題になることがある。上位バージョンのデータベースをリストアまたはアタッチしようとしてもエラーが出るのだ。

これを回避する方法がMicrosoftのサイトにも書かれているのだが、具体的に何をやればいいのか分からない。日本語の問題か?と思い英語を読んでも誤訳ではなかった。

SQL Server 2000から2005にアップグレードする際、マイグレーションセミナーに申し込み、トレーニングを受けたことがある。これは実際にデータベース等を持ち込んで実際に触ってみる/分からないところは質問する、という形式で、仕事場の片隅で放置状態(というと適切ではないかも知れないが、ご自由にどうそ、というスタイル)で行われた。
その際、過去データベースのバージョンを選択でき、そのバージョンにしてやれば過去のものでもそのまま動く、というものだった。

上記での対応は2005のSQL Server Management studio を使ってなら、理解できなくはない。

しかし、2008ではそはいかず、である。

なお、過去のデータベースの互換に関しては、2008では2000までの対応である。次のバージョンでは2005までの対応となるそうだ。古いデータベース形式に対応するのは困難ではないはずだし、パフォーマンスも変わらないと聞く。そうなると、製品のライフサイクルをいたずらに短くしているだけではないのか?とkんぐりたくなる。

他のデータベースエンジンはどうなのだろう?情報があるとありがたい。



  • なうで紹介
  • mixiチェック
  • ツイートする

2011年10月10日

floatからnvarcharへのキャスト

SQL Server ネタである。
とあるデータをSQL Serverに取り込むと、整数なのにfloat型になった。これを文字型で使いたいのでと、nvarchar型に変換した。

cast(aaa as nvarchar)

しかーし!なんだか指数表現の数字になってしまう。convert関数を試してみても同様。テーブルの型を強引に変更してもやはりダメ。

そういえば、整数だからfloatでなくていい。intからnvarcharへのキャストは実績がある。じゃあ・・

convert(nvarchar,convert(int,aaa))

見事に成功!

これに気付くまで10分。最近は頭が固くなったものだ・・。



  • なうで紹介
  • mixiチェック
  • ツイートする

2011年07月11日

Accessを上手に使おう おおまかな方向性の根底にあるもの

Accessを上手に使おう、ということでおおまかな方向性を2つ記載した。

その1
その2

しかし、「どうしてそんなことを?」と思われる方もいらっしゃるでしょう。

体験している人なら分かるが、そうでない人にも理解、納得してもらうようでなければ、ここに書いた考え方は普及しないだろうと思いますので理由を書いておこうと思います。

処理を移行する際に限った話ではないですが、現在の処理がどのようになっているのかを理解しやすい状態になっていると、保守・メンテナンス、修正、引き継ぎなどを行う上での作業効率がよいです。しかしながら現在のAccess(に限った話ではないですが)の機能をなんとなく利用していると、「現在の処理がどのようになっているのか」を把握するのに時間がかかるうえ、見落としなどが発生することがよくあります。手間がかかるほどミスが増えるのは必然です。

例えば
>・データベースに関して
>  対象:テーブル、クエリ

と書いています。

選択系クエリに似たものとしてビューというものが一般的なDBMSにはあります。しかし更新をサポートするものはないわけではないようですが、あまり聞かないうえ実務で使っているのも見ません。
SQL文をベタ書きするにせよ、パラメータを渡して組み立てるにせよ、ソースコード内や外部のテキストファイルを「検索」すればSQL文が洗い出せます。しかし、クエリの中にあるといちいち開いてみなければならない、という手間がかかります。
中には上手にクエリを整理してる場合もありますが、多くの場合、いい加減な命名やいい加減な安全策しか採られていないのが現実です。

データが変更(作成、更新、削除)される契機はどこなのか、ということを把握するのは非常に重要なことなのです。それが読み取りにくい、分かりにくい、というようでは個人でずっとお守りをしていくなら別ですが、引き継いでいけるシステムにはならないでしょう。

余談かもしれませんが、システムはブラックボックスであるとよく言われています。しかし、それはブラックボックスにしたからブラックボックスになっただけで、今はきらいな表現ですが「見える化」ということを推進されています。上場企業では内部統制の一環として基幹のシステムがブラックボックスではいけないようにもなっています。
別に基幹のシステムじゃなくても分かりやすくすれば、保守、引き継ぎ等はうんとラクになるはずなのです。これはAccessを捨て去るか否か、といった以前の問題なのです。


是非とも保守、運用の面に重点を置いてほしいと思います。
  • なうで紹介
  • mixiチェック
  • ツイートする

2011年06月15日

DBとしてAccessを使うくらいならSQL Server Express を使おう

AccessのフォームやVBAを使っているとなかなかAccessから離れられないだろう。しかし、データベースに関して「遅い」と感じるなら、データベースをAccessから別のものに置き換えることをおすすめする。
フリーのものがいくらか出回っているが、個人的には SQL Server 2008 R2 Express Edition を薦めたい。

容量など制限はあるが、フリーである。更にSQL Server Management Studio というツール付きのものもあり、SQL文に慣れていなくてもこれがあればデータベース作成等にそれほど苦労はしないだろう。

先日、あるWebシステムでデータベースにAccessを使っていたものがあった。件数が増えるとついにタイムアウト(30秒だったと思う)が起きるようになってしまったのだが、SQL Server に置き換えると多く見積もっても3秒以内で処理が返ってきた。なお、トレーサーなどがなかったので体感的なターンアラウンドタイムであるが。
つまりは、少なくとも10倍程度の速度はある、ということだということになる。

Accessでちまちまとチューニングをしてもなかなか大きな効果は得られないだろう。データベースエンジンを変更し、SQL文を変更、場合によってはSQL文を使っていないのでSQL文に修正しないといけないし、DBへの接続を変更する必要があるが、速度はずいぶんと速くなる。
ただ、上記のような変更が困難、というケースもあるのだろう。自前で作成したものであればともかく、業者に依頼して作成したもので「全面作り直し」「莫大な費用がかかる」「難しい」という回答が返ってくるなら、そういう業者はあまり信用できないのではないだろうかと思う。よほど元の作りが下手くそか、技術力がないか、のどちらかに違いないと思われるからだ。

Accessは遅いので、データベースを置き換えられるように設計しておく、というのが常識として認識されてほしいものである。そのためにVBAの書き方のお作法ってものや、マクロ、クエリ、フォームののお作法ってものも、実践していれば自ずと見つかるのだ。
そのあたりも情報発信が必要なのかもしれない。
  • なうで紹介
  • mixiチェック
  • ツイートする

エンジニアが作る最新ITブログ トップ>エンジニアの発信する【その他DBMS】

メンバー紹介

タグパネル

ランキング

エンジニアが作る最新ITブログ DODA