SQLer 生島勘富 のブログ

RDB・SQLの話題を中心に情報発信をしています。

システム設計

なぜごり押しなのか4

私は基本的に、インターネット上の議論では個別の事情は挟むべきではない。と考えています。 私が個別の事情を挟んでいるとか、感情的とかいう人がいるけれど、全く逆です。 相手が【詐欺師レベル】と分かったとき、議論を打ち切って感情的に怒っているだけ…

なぜごり押しなのか3 -- 初級シスアドレベルは超えるべき。

なぜ、煽って【詐欺師】なんて言うかというと、これは初級シスアドで出題された問題です。 初級シスアドの午後の問題を見れば分かりますが、他が満点でもSQLができなければ合格できない比重になっています。それでも、初級シスアドなんて、就職氷河期を乗り…

なぜごり押しなのか2 -- 詐欺師になるな。

世の中には本当に【詐欺師】のような技術者が詐欺的なものを作って飯を食っています。 例えば、以下、ぱっと見て何をやっているSQLか理解できるでしょうか。 ■ テーブル構造 ■SQL SELECT 資格取得履歴表.社員番号,COUNT(*) FROM 資格取得履歴表,社員表 WHE…

なぜごり押しなのか。

私は妥協点をほとんど出しません。なぜそんなに頑ななのか?その答えは単純です。 SQLを使うか、使わないかでは以下の様なグラフになります。 しかし、多くの人達は以下の様なイメージ上で、議論を行っています。 皆さんがある程度許せるという妥協点は赤丸…

重要な言い換え

ユーザが話したことを、システム化するのがSEの仕事ですが、ユーザが言ったことは、適宜、言い換えなければならない。私は SE の業務理解、設計能力に最も必要な能力は「どれだけ言い換えられるか」ではないかと考えています。 受注のない売上はない! ユー…

トリガーを自動生成2

前回の続き。 非正規化した項目の整合性を維持するトリガーをかいてみます。 トランザクションテーブルにトリガーを設定する。 例として、以下の様な受注明細があったとして、その非正規化項目の整合性を維持するトリガーを書いてみます。 CREATE TABLE T010…

トリガーを自動生成1

トリガーの適応範囲はエクセルで出力できるところまでとすると、必然的にできることは限られます。関連チェックや整合性の維持に限られるでしょう。 まずは書いてみる。 以前書いたトリガーを少し修正してみましょう。(SQLServerで書きました。) トリガー…

トリガーの勘所 -- 「自動的にやってくれる」と「勝手に変わった」

トリガーを嫌う人は非常に多い。 トリガーはレコードの更新を起点(トリガーにして)に自動的に動くので、アプリケーション側のプログラムソースからは追いかけられず、プログラマが意図しない結果になることがある。というのが嫌われる一番の理由でしょう。…

効率の山は複数回訪れる。

正規化の効率を考えてみる。 正規化は基本的な技術ですが、COBOLから抜けきれていないと正規化すると遅くなると感じる様になる。 これはおそらく私もだろうと思うけれど、効率をグラフ化して最初に訪れた山が最高と感じるものです。それはつまり、落ち始めた…

無意識を意識する。

そもそも、私はプログラムを習ったことがないから、一般的な専門学校などでやっている様な講義は知らないしやりようがない。私が講師をやると厳しすぎるので、新人教育を担当することはないのですけれど……。 新人を相手するときに、私が最初に説明するのは「…

OLAP(分析)関数について -- 完成

前回の続きです。やっと完成です。 ざっくりとした考え方(毎回) GROUP BY は集約するので、結果が(集約キーを出力すれば)一意になる。つまり、出力される結果が一意になるまで集約される。 しかし、OLAP(分析)関数は、SELECTされた結果を区切って処理…

OLAP(分析)関数について -- OLAP(分析)関数はSELECT句で並び替え

前回の続きです。やっとOLAP(分析)関数までたどり着きました。 ざっくりとした考え方(毎回) GROUP BY は集約するので、結果が(集約キーを出力すれば)一意になる。つまり、出力される結果が一意になるまで集約される。 しかし、OLAP(分析)関数は、SEL…

OLAP(分析)関数について -- その前にサブクエリーで処理

前回の続きです。 ざっくりとした考え方(毎回) GROUP BY は集約するので、結果が(集約キーを出力すれば)一意になる。つまり、出力される結果が一意になるまで集約される。 しかし、OLAP(分析)関数は、SELECTされた結果を区切って処理する。そのため、…

OLAP(分析)関数について -- SQLはテストファースト指向

OLAP(分析)関数は考え方としては、SQLの他の構文よりも手続き型言語と差が小さい。 考え方ではなく、文法から入る人にとってはとんでもない違いに感じるかも知れませんが、答えは同じなのですから違いはないのです。 長くなるので数回に分けて書こうと思う…

サロゲートキーは後付けでもできる。

業務システムのほとんどはナチュラルキーで構築されていると思います。 しかし、シノニムやトリガーを利用すれば、既存システムを変更することなくサロゲートキーを追加して、それ以降、サロゲートキーによる運用も可能になります。手順は以下の通りです。 …

命名法 - 主キーはサロゲートキーで、テーブル名はナチュラルキーで(笑)

完全に新規の案件というのは本当に少ないので、実践できることはほぼない理想論ですが、私の理想とするテーブル構造と命名法です。 まずは、サロゲートキーについて サロゲートキーというのは業務上意味のないキーのことです。 例えば、生徒テーブルは、年次…

まとめ

http://d.hatena.ne.jp/Sikushima/20110809 http://d.hatena.ne.jp/Sikushima/20110810 http://d.hatena.ne.jp/Sikushima/20110811 http://d.hatena.ne.jp/Sikushima/20110815 のまとめです。 何度も何度もSQLでやった方が理論的には効率的と書いてきた。何…

粘着されるとうっとうしいので少し

私はいろんな人に絡まれています。今までのべ数百人を相手にしてきたので、コメント下さる方はコメントを送った!という感覚かも知れないけれど、残念ながら会ったこともない人を覚えるなんてことはほとんどありません。 1年以上前に「こんな条件でC++でJOI…

シビアな設計

http://d.hatena.ne.jp/Sikushima/20110809 http://d.hatena.ne.jp/Sikushima/20110810 http://d.hatena.ne.jp/Sikushima/20110811 の続きです。 シビアな設計が要求されるということは、リソースのどこかにボトルネックが発生するということになります。 ボ…

お手製パーティションテーブルと分散データベース

お手製パーティションテーブルも、分散データベースも、このようなやり方では実はやったことはない。 理論上はお手製で可能ですが、パーティションテーブルと分散データベースが必要な規模では Enterprise Edition を導入した方が良いという判断になり、政治…

バッドノウハウを受け入れるべきではない

SQLを使わない成功事例があります。なんて書くと、SQLが苦手だと考えている層に、それがどんなにバッドノウハウでも諸手を挙げて受け入れられる。 しかし、プロジェクトとしては成功でも、技術的に成功とも正しいとも言えない。もちろん、それだけでは間違っ…

コメントを頂いたので

数値を文字型で持つべきではない コメントをいただいたので。 前の記事はこちら。 http://d.hatena.ne.jp/Sikushima/20110809/1312871002 元ネタはこちら。 http://d.hatena.ne.jp/iad_otomamay/20110808/1312805917 http://d.hatena.ne.jp/iad_otomamay/201…

JOIN禁止と固定長カラムについて

あまりに気になったので「山本大@クロノスの日記」にチャチャを入れてみる。 http://d.hatena.ne.jp/iad_otomamay/20110808/1312805917 http://d.hatena.ne.jp/iad_otomamay/20100906/1283786846 まあ、政治的にはどのみち勝てなかったでしょう。私も同じ条…

エクセル方眼紙は嫌いなんだが2

多分、サンプルコードでは使えないと思ったので少しなおしました。 ソースも少しきれいにしました。 『次のシェイプ』『前のシェイプ』を使うときはマクロのショートカットキーを設定するとよいと思います。 サンプルでは、 『次のシェイプ』 Ctrl + m 『前…

エクセル方眼紙は嫌いなんだが

まあ、エクセル方眼紙は嫌いなんだけど、エクセルにシェイプを置いて仕様書を作るなんて大嫌いなんだけど、ちょっとしたマクロで楽になることもあるのでマクロを書いてみた。 薦めているわけじゃないので勘違いはしないで欲しい。 ソースはちょっとしたサン…

関連チェックはトリガーで

有効期限付きのマスターを使うことが増えてきましたが、これらはトリガーでチェックすることが効率的です。 トリガーならエラーを返すことができる。 サロゲートキーを利用した以下の様なテーブルがあったとします。 CREATE TABLE Item ( ID int IDENTITY(1,…

ストアドプロシージャについて質問を頂いたのでまとめ

試用版を公開しました Oracleの試用版をダウンロード SQLServerの試用版をダウンロード セミナー情報 9月17日にセミナーでお話しさせて頂きます。 首都圏の皆様、無料ですのでよろしければご参加ください。 http://www.microsoftplatformready.com/jp/Home.a…

Oracle派なのに、なぜMicorsoftなのか

Micorsoftさんのセミナーでお話しさせて頂くことになりました。首都圏の方、お時間があればご参加ください。 https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032457242&culture=ja-JP 今回は入門編なので、過激なことを言ったりしないので、…

LIKE検索は使ったらダメな場合もある - 全文検索について

SQLのLIKE検索は非常に便利です。しかし、データ量によっては使ってはいけません。 例えば、 WHERE 備考 LIKE '%大阪%' とすれば備考欄に'大阪'が含まれているレコードをすべて取得することが可能ですが、当然、インデックスは使えません。必ずテーブルをフ…

オブジェクト指向言語で処理すると工数が掛かる

数回に分けて複雑なSQLををストアドプロシージャ(ファンクション)を使ってデチューンしてみました。 整理すると ■1.OLAP関数を使って一括処理するパターン ■2.誤差配賦額をファンクションを使って計算するパターン ■3.誤差配賦額をファンクション内でル…