システム設計
私は基本的に、インターネット上の議論では個別の事情は挟むべきではない。と考えています。 私が個別の事情を挟んでいるとか、感情的とかいう人がいるけれど、全く逆です。 相手が【詐欺師レベル】と分かったとき、議論を打ち切って感情的に怒っているだけ…
なぜ、煽って【詐欺師】なんて言うかというと、これは初級シスアドで出題された問題です。 初級シスアドの午後の問題を見れば分かりますが、他が満点でもSQLができなければ合格できない比重になっています。それでも、初級シスアドなんて、就職氷河期を乗り…
世の中には本当に【詐欺師】のような技術者が詐欺的なものを作って飯を食っています。 例えば、以下、ぱっと見て何をやっているSQLか理解できるでしょうか。 ■ テーブル構造 ■SQL SELECT 資格取得履歴表.社員番号,COUNT(*) FROM 資格取得履歴表,社員表 WHE…
私は妥協点をほとんど出しません。なぜそんなに頑ななのか?その答えは単純です。 SQLを使うか、使わないかでは以下の様なグラフになります。 しかし、多くの人達は以下の様なイメージ上で、議論を行っています。 皆さんがある程度許せるという妥協点は赤丸…
ユーザが話したことを、システム化するのがSEの仕事ですが、ユーザが言ったことは、適宜、言い換えなければならない。私は SE の業務理解、設計能力に最も必要な能力は「どれだけ言い換えられるか」ではないかと考えています。 受注のない売上はない! ユー…
前回の続き。 非正規化した項目の整合性を維持するトリガーをかいてみます。 トランザクションテーブルにトリガーを設定する。 例として、以下の様な受注明細があったとして、その非正規化項目の整合性を維持するトリガーを書いてみます。 CREATE TABLE T010…
トリガーの適応範囲はエクセルで出力できるところまでとすると、必然的にできることは限られます。関連チェックや整合性の維持に限られるでしょう。 まずは書いてみる。 以前書いたトリガーを少し修正してみましょう。(SQLServerで書きました。) トリガー…
トリガーを嫌う人は非常に多い。 トリガーはレコードの更新を起点(トリガーにして)に自動的に動くので、アプリケーション側のプログラムソースからは追いかけられず、プログラマが意図しない結果になることがある。というのが嫌われる一番の理由でしょう。…
正規化の効率を考えてみる。 正規化は基本的な技術ですが、COBOLから抜けきれていないと正規化すると遅くなると感じる様になる。 これはおそらく私もだろうと思うけれど、効率をグラフ化して最初に訪れた山が最高と感じるものです。それはつまり、落ち始めた…
そもそも、私はプログラムを習ったことがないから、一般的な専門学校などでやっている様な講義は知らないしやりようがない。私が講師をやると厳しすぎるので、新人教育を担当することはないのですけれど……。 新人を相手するときに、私が最初に説明するのは「…
前回の続きです。やっと完成です。 ざっくりとした考え方(毎回) GROUP BY は集約するので、結果が(集約キーを出力すれば)一意になる。つまり、出力される結果が一意になるまで集約される。 しかし、OLAP(分析)関数は、SELECTされた結果を区切って処理…
前回の続きです。やっとOLAP(分析)関数までたどり着きました。 ざっくりとした考え方(毎回) GROUP BY は集約するので、結果が(集約キーを出力すれば)一意になる。つまり、出力される結果が一意になるまで集約される。 しかし、OLAP(分析)関数は、SEL…
前回の続きです。 ざっくりとした考え方(毎回) GROUP BY は集約するので、結果が(集約キーを出力すれば)一意になる。つまり、出力される結果が一意になるまで集約される。 しかし、OLAP(分析)関数は、SELECTされた結果を区切って処理する。そのため、…
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…
あまりに気になったので「山本大@クロノスの日記」にチャチャを入れてみる。 http://d.hatena.ne.jp/iad_otomamay/20110808/1312805917 http://d.hatena.ne.jp/iad_otomamay/20100906/1283786846 まあ、政治的にはどのみち勝てなかったでしょう。私も同じ条…
多分、サンプルコードでは使えないと思ったので少しなおしました。 ソースも少しきれいにしました。 『次のシェイプ』『前のシェイプ』を使うときはマクロのショートカットキーを設定するとよいと思います。 サンプルでは、 『次のシェイプ』 Ctrl + m 『前…
まあ、エクセル方眼紙は嫌いなんだけど、エクセルにシェイプを置いて仕様書を作るなんて大嫌いなんだけど、ちょっとしたマクロで楽になることもあるのでマクロを書いてみた。 薦めているわけじゃないので勘違いはしないで欲しい。 ソースはちょっとしたサン…
有効期限付きのマスターを使うことが増えてきましたが、これらはトリガーでチェックすることが効率的です。 トリガーならエラーを返すことができる。 サロゲートキーを利用した以下の様なテーブルがあったとします。 CREATE TABLE Item ( ID int IDENTITY(1,…
試用版を公開しました Oracleの試用版をダウンロード SQLServerの試用版をダウンロード セミナー情報 9月17日にセミナーでお話しさせて頂きます。 首都圏の皆様、無料ですのでよろしければご参加ください。 http://www.microsoftplatformready.com/jp/Home.a…
Micorsoftさんのセミナーでお話しさせて頂くことになりました。首都圏の方、お時間があればご参加ください。 https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032457242&culture=ja-JP 今回は入門編なので、過激なことを言ったりしないので、…
SQLのLIKE検索は非常に便利です。しかし、データ量によっては使ってはいけません。 例えば、 WHERE 備考 LIKE '%大阪%' とすれば備考欄に'大阪'が含まれているレコードをすべて取得することが可能ですが、当然、インデックスは使えません。必ずテーブルをフ…
数回に分けて複雑なSQLををストアドプロシージャ(ファンクション)を使ってデチューンしてみました。 整理すると ■1.OLAP関数を使って一括処理するパターン ■2.誤差配賦額をファンクションを使って計算するパターン ■3.誤差配賦額をファンクション内でル…