RDB

生きているうちに自然キーvsサロゲートキー問題に決着を付けたい(1)

営業のアプローチ方法にA,Bがあるとして(例えば「礼状は手書きで出す」「礼状は印刷して出す」とか)、Aの成約率が10%でBのそれが5%なら、「Aしかやらない」というのは悪くない選択だろう。だが我々の仕事は営業とは違っている。 ある量産品の製造方法にA,Bが…

県と市町村を属性に持つ顧客マスタは非正規形

新人研修で正規化理論を解説しなきゃならないので復習してみたが、やっぱり実践との関係がよくわからない。 例えば第三正規形の定義は 第二正規形である すべての非キー属性が、キーに対して推移従属していない だと思うんだけど、であれば次のような顧客マ…

Teradataの待ち行列の捌き方・readロックがreadロックを排他しているように見える現象

Teradataでは、readロックがwriteロックを排他する。 つまり、あるテーブルの読み取りのみ行うトランザクションAを実行中に、そのテーブルを更新するトランザクションBを開始すると、更新トランザクションBは、Aがreadロックを解放するまで待ちになる。 ここ…

WebサイトのバックエンドにTeradataを採用するプロジェクト

けっこう大きなWebサイトの構成立案に弊社が参加していて、バックエンドのDBの選定などがウチ担当になっている。 高速なDBが必要ということで、営業サイドはTeradataを推す案を作っている。 高速なDB -> じゃあTeradataで、という感じなのだが、アプリの実装…

同一テーブルに対してinsertする2つのトランザクションがデッドロックした

Teradataで、あるテーブルに対して複数行insertするジョブを並行して走らせたところ、デッドロックしてしまった。 Teradataの場合、insertのデフォルトのロックはテーブルロックだと思っていたのだがこれが間違いで、実は行ハッシュロックというのが掛けられ…

Read-Onlyのトランザクションがデッドロックした

RDB

デッドロックによりアボートされたジョブがあるので原因を調べてくれ、と言われたのでヘラヘラしながら調べ始めたら、原因がさっぱり分からなくて参った。 デッドロックしているのだから トランザクション1は テーブルa -> テーブルb の順に更新する トラン…

日本語カラム名はかなりメジャーな存在らしい

DB設計を考える - かつのりの日記2 http://blogs.wankuma.com/kacchan6/archive/2007/08/15/90463.aspx ここの管理人さん*1が「テーブル名・カラム名の名前付けルールはどうしてる?小文字アンダースコア区切り?キャメルケース?」というアンケートを取っ…

カーディナリティて何ですの

RDB

データベースまわりでカーディナリティとか濃度という言葉がバラバラの意味で使われているので整理する。 以下の3種類の使われ方がある。 1. relationのカーディナリティリレーション中のタプルの数(不正確に言えばテーブル中のレコード数)をカーディナリ…

Sybase IQが速い仕組み

RDB

サイベースの情報系専用RDBMS・Sybase IQのデモを見てきた。 ノートPCにインストールしたSybase IQが、1億件x数万件x数万件x数万件の結合と集計を5秒でこなしていた。 同社の汎用DB(Sybase ASE)は同等の処理に80秒かかっていた。 一般的なRDBがレコード…

2項が取りうる4つの関係。クラス設計をデータ設計に転用できない理由

2つの集合なり概念なりがあったら、それらの関係は以下のうちどれかになるが、 1. まったく重ならない 2. 一部重なる(けど包含関係じゃない) 3. 包含関係 4. 全部重なるTMでは、2項の関係が上記のうちどれなのかに激しくこだわる。 例えば取引先の区分に「…

意味ありコードの実装

ユーザが意味ありコードを要求する理由がよくわからないのだが、西田順生「作る前にコストダウンする技術―景気はいいのになぜ儲からないのか (PHPビジネス選書)」に意味ありコードの実例が載っていたので実装方法を考えてみる。 以下はGroup Technology*1を…

マスタメンテナンスで未来のデータを入力したいんですけど

マスタメンテの扱いは毎回困るところ。 どうもマスタデータには「最新」系のものと「無時間」系のものがあるらしい。 いつのトランザクションデータと結合しても問題ないのが「無時間」のマスタで、問題を起こすことがあるのが「最新」のマスタ。 元号マスタ…

内的・外的ということと外部キー

内的・外的という考え方がある。 野矢茂樹「ウィトゲンシュタイン『論理哲学論考』を読む (ちくま学芸文庫)」 P-50 それが変化したとしてもあなたがなお同一人物であり続ける場合、その性質や関係はあなたという対象にとって 「外的」であるといわれる。それ…

フラグを属性にするか、リレーションシップにするか

オブジェクトモデリングで何だかよく分からないことに、あるデータ項目を属性にするか関連にするかの基準があいまい、というのがある。 怪しい世界だなあと思って見ていたが、考えてみるとデータモデリングの世界もおんなじです。 あるデータ項目を「属性に…

エンティティの見出し方・属性の割り振り方 - 伝統的設計・T字形ER手法・ABD

非正規形の表が与えられたときに、その表を出力できるDBをどうやって設計するか。 伝統的DB設計法・T字形ER手法・ABDのやり方を並べて書いてみる。 伝統的DB設計法 伝統的なDB設計では、非正規形の表を正規化する過程で、エンティティを切り出していく。 ま…

データモデリング手法の進化の方向

真野氏のやり方を見て思うのだが、データモデリング手法は着実に基底テーブルが増える方向に進んでいるのだな。 昔は主キーに対して関数従属するデータは全部同じ器に放り込んでいた。社員マスタに所属部門コードが入っていてもOK。 現役社員と退職社員を区…

エンティティ内の属性のライフサイクルを揃える

真野正 実践的データモデリング入門 (DB magazine selection) によると、CRUD分析とは別にIRUN分析というものがあるそうだ。 CRUD分析では、各アクティビティがCRUDするエンティティの中の、どの属性が読み書きされるのかまではわからない。 そこでエンティ…

delete&insert するデータのIDを維持しなくてはならない ... のだろうか (2)

前回 http://d.hatena.ne.jp/tgk/20060913#1158169167 の続き。 いろいろコメントをいただいたおかげで理解が進んだ。がっつり整理する。 IDあるいは代理キーの導入に肯定的な人であっても、立場がいろいろある。今見えているポジションが3つ。 全てのテー…

delete&insert するデータのIDを維持しなくてはならない ... のだろうか?

IDについてまだ考えている。 テーブルごとに必ずIDを振るという考え方に、まだ抵抗がある。 「今のところ誰も見ていないID」を振る意味が分からないのだが... 「誰も見ていないID」とは例えば、delete&insert で一括登録するレコードに付けたID。 マスタに…

IDがあっても、event からコードを削除してはいけない

盛り下がってきたけど、今かすかにID論が熱い! 渡辺氏がIDについて懸念していることに自分もよく引っかかるので、自戒のメモ。 コードはfactだから削除しちゃダメ ウチで持っているECサイトのパッケージでは、受注明細テーブルに、商品マスタから商品名をコ…

DOA派からサロゲートキーが嫌われる理由

今、複合キー論が熱い! 渡辺幸三氏の「設計者の発言」で、サロゲートキーがDOA派から嫌われている理由がわかった。 理由の一つは、サロゲートキーの導入によって、もともとある複合キーの実装が忘れられがちになる。だから危ない、ということだった。 とい…

「コード体系はユーザインターフェイスである」とはどういうことか

今、複合キー論・ID論・コード体系論が熱い! トラックしてるけど流れが速くてついていけない。地道に整理する。 まずは羽生氏の言う「コード体系はユーザインターフェイスである」の意味がわかったと思うのでメモ。 多分こういうこと: 「コード体系はユー…

ABD (Activity Based Modeling) の体系を想像する(1)

羽生章洋氏のABD (Activity Based Modeling) とはいったい何か、唯一のまとまった資料 http://event.seasar.org/sc2006spring/viewAttachment.do?_pageName_=Materials%2FD4.ppt からその全体像を復元するシリーズ。 もちろんご本人に伺えばいいんだけど、ま…

楽々ERDレッスンを読む(2) - 第2部 RDBMS総論

羽生氏の 楽々ERDレッスン (CodeZine BOOKS) のまとめ2回目*1。 第2部のポイントは、P-114からの「インピーダンスミスマッチの解決方法」。 その方法とは... P-115 お薦めしたいのがストアドプロシージャを利用することです。 では、ストアドプロシージャ…

「一般的には、第3正規形まででよい」の根拠は何か?(5)

RDB

「一般的には、第3正規形まででよい」理由について書かれた貴重な記事をきちんと読んでみた。 素早く正規形を見抜く実践テクニック http://www.atmarkit.co.jp/fdb/rensai/db_enginer03/db_enginer03_1.html 「なぜ第3正規形まででよいのか」の結論は以下の…

楽々ERDレッスンを読む(1) - 第1部 DB設計総論

羽生 章洋「楽々ERDレッスン (CodeZine BOOKS)」を読了したので3回に分けてまとめ。 まず第1部「DB設計総論」。 浅海氏智晴氏はこの第1部について「上級者向け」と書いてらっしゃるが、そんなことはない。 初めてDB設計をやる人は絶対に読んだ方がいいと…

「C.J.Dateの データベース実践講義」からいつか役に立ちそうな話をメモ(2)

一応読了。 へぇと思ったところと、その他思いついたことをメモする。 ORDER BYはリレーショナル演算子ではない 理由は、タプルに並び順のあるもの=リレーションではないものを返すから。 とはいえ、DateはORDER BYを否定しているわけではない。 便利な道具…

nullについて最後まで考える(1) --- T字形で消せるnull,消せないnull

正美氏とかDateの本を読むと、Codd論文を理解するとnullの存在が許せなくなるのだなあ、と思う。 私はこのnull徹底排除の感覚が理解できていない。Codd論文読んだことないし。比較演算や集計演算の対象に null が混入していると、直感に反する結果が出てくる…

変化と進歩は違う

RDB

no-nameさんに教わったページ http://www.geocities.jp/mickindex/database/db_whyname.html#LocalLink-second によれば、第二階述語論理にもとづくリレーショナルモデル=リレーションを収容するリレーションは、Coddの初期の論文ですでに提示されていたの…

ObjectStoreの怖い噂

弊社内に、ObjectStore(Progress SoftwareのOODB製品)上に構築されたシステムの保守を担当しているチームがある。 ObjectStoreにはJavaオブジェクトをそのまま出し入れできるのだが、永続化クラスにプロパティが増えたりしたら既存のデータはどうなってしま…