タグ

ブックマーク / watanabek.cocolog-nifty.com (8)

  • 「論理削除」ではなく「無効化」を - 設計者の発言

    以前の記事で、テーブルに「スタンプ属性」をいちいち載せるのは惰性的習慣ではないかと書いたが、似たものに「論理削除フラグ」がある。各テーブルにいちいちこれが置かれているDBを見ることがあるが、それもまた惰性の結末ではないか。スタンプ属性だろうが論理削除フラグだろうが、必要ならば置くべきだし、必要でないなら置くべきではない。ただし、多くのケースで必要なのは「論理削除」ではなく「無効化」であることは知っておいたほうがいい。 削除のややこしさは、他テーブルとの関係にある。まず、通常の削除(物理削除)について見よう。テーブルAと参照関係にあるテーブルBがあるとする(図1)。ここで、テーブルA上のレコード①が、テーブルB上のレコード③と④によって結合(参照)されているとすれば、①を削除することは許されない。もし削除してしまえば、存在しないAレコードを結合するBレコードの存在を許してしまう。典型的な更新

    「論理削除」ではなく「無効化」を - 設計者の発言
    t-wada
    t-wada 2016/05/21
    渡辺幸三さん論理削除を語る "「とりあえずの論理削除フラグ」や「そもそも削除なんて不要」といった思考停止に陥ることなく、個別に緻密に考えること。それがシステム設計という因果な仕事の基本"
  • 主キーはインデックスではない - 設計者の発言

    仕事柄、奇妙なDB構造を目にすることが多い。どういう発想からそんな設計がされるのかを理解したいと思っていたのだが、モデラー仲間の秋里さんが先日うまい指摘をした。「主キーをインデックスみたいなものと勘違いしているからではないでしょうか」。インデックス(キー)というのは、レコードの並び順を規定するキーのことだ。 たしかに思い当たる節がある。「こんな順にレコードが並んでいれば処理上都合がよさそうだ」という考えで主キーが設定される。さらに主キーはユニーク制約でもあるので、重複が起こらないように「多め」に項目を突っ込んでおく。つまり「ユニーク制約をともなう代表的インデックス」程度に主キーが理解された結果として、グダグダなDB構造が出来上がるのではないか。 じっさい、昔こんなことがあった。{a,b,c,d}の複合主キーをもつテーブルXがある。ところが、別のテーブルYからテーブルXの特定レコードにアクセ

    主キーはインデックスではない - 設計者の発言
    t-wada
    t-wada 2014/08/27
    “主キー設計とは、「いくつかの関数従属性が成立することを分析する仕事」というよりは、むしろ「圧倒的多数の関数従属性が成立しないことを保証する仕事」である。その責任の重大さがおわかりだろうか”
  • 複合主キー「否定派」と「許容派」の論争 - 設計者の発言

    定期的に取り上げたくなるDB設計に関する話題である。WEBアプリが一般化して以来、議論されてきた事柄がある。テーブルの主キーを「単独主キー」のみとするか、複数項目を組み合わせた「複合主キー」を必要に応じて使うべきかという問題だ(*1)。複合主キーに対する「否定派」と「許容派」に分かれた議論は劇烈で、宗教論争のようにも見える。 主キーというものは、テーブルの存在意義といってもいいほどに重大な要素である。にもかかわらず、なぜそんな基的なレベルの議論が始まってしまったのか。2つほどの理由が考えられる。 まず、単独主キーとしてIDを機械的に置くやり方(ID方式)が「オブジェクト指向」と相性がよかったからだ。オブジェクトは固有の識別子(オブジェクトID)を持つので、これに相当するIDをテーブルの主キーとすることで、オブジェクトとDBの設計問題を統合できると考えた技術者が少なからずいた。そのアイデア

    複合主キー「否定派」と「許容派」の論争 - 設計者の発言
    t-wada
    t-wada 2013/12/02
    "複合主キーを許容すべきかどうかは「ナチュラルキーか代理キーか」の議論とは関係ない(直交している)"
  • サロゲートキーと「とりあえずID」の違い - 設計者の発言

    サロゲートキー(代理キー)は慎重になされる限り、有用なテクニックである。いっぽう、すべてのテーブルに機械的にIDを置く「とりあえずID(IDリクワイアド)」の設計スタイルでは、複雑なデータ要件を扱った途端にひどい目にあう(とくに保守担当者が)。両者の違いをしっかり理解しておこう。 何でもいいのだが、ここでは生産管理システムで見かけそうなシンプルなモデルを使って説明しよう(図1)。「作業区・品目」は、それぞれの作業区で生産可能な品目の組み合わせと、その品目を扱った際の生産性(時間あたり生産数)の管理簿である。 <図1> [工程]工程id,工程名,扱い単位 +   ̄ ̄ ̄ |   001 切削  個 |   002 加工  m | └―∈[作業区]工程id,行番,作業区名,標準生産性 +    ̄ ̄ ̄ ̄ ̄ ̄ |    001 01  切削1号 1000/hr |    001 02  切削2号 2

    サロゲートキーと「とりあえずID」の違い - 設計者の発言
    t-wada
    t-wada 2013/03/25
    おおっ! 『SQL アンチパターン』が渡辺幸三さんまでリーチしている!! 解説ありがとうございます! #sqlap
  • サロゲートキーは強制されるべきものではない - 設計者の発言

    複合主キーに代えてサロゲートキー(単独主キーの代替キー)を導入すべきかどうか。それはDB設計上の重要な判断事項である。なにしろレコードのアイデンティティである主キーの設定にかかわる問題だ。さまざまなメリットやデメリットを考慮してそれは判断される。その結果、サロゲートキーを導入することもあるし、しないこともある。 ところが、サロゲートキーを強制する(あるいはサロゲートキーを導入しないと開発しにくい)開発基盤がいくつか存在する。具体的には、全テーブルの識別子が"ID"等のフィールド名を持つ単独主キーであることが求められたりする。私に言わせれば、そういう開発基盤は「大盛を強制する牛丼屋」である。メニューにあるはずの「並」を頼むと、あれこれイヤガラセをされる牛丼屋。 この問題に関連して、「サロゲートキーを使わなかったから、ひどい目にあった」という開発者の声を聞いたことがあるかもしれない。心配はいら

    サロゲートキーは強制されるべきものではない - 設計者の発言
    t-wada
    t-wada 2012/01/30
    "データベースシステムには「複雑さの保存則」のようなものがある。「データ構造の複雑さ」と「データ処理の複雑さ」の総量は一定である" なるほどと思う。そして結論にはとても同意する。
  • 個別案件にオブジェクト指向は要らない - 設計者の発言

    「ウォーターフォールかアジャイルか」をはじめとして、ソフトウエア開発手法に関してさまざまな議論があるが、すべてのソフトウエアをいっしょくたにすべきではない。たとえば「ECサイト」と「業務システム(基幹業務支援システム)」とは、同じ「データベースシステム」に分類可能だとしても、専門性が大きく異っている。両者をまとめて議論しても実りが多いとは私には思えない。 私の専門は「業務システム」なのだが、次のように勘定科目と密接な関係を持つ複雑なデータ構造を扱う点が特徴的である。 <サービス業向け販売管理システム> ・発注、買掛残高、仕入実績、支払 ・受注、売掛残高、売上実績、原価実績、請求 <物販業向け販売管理システム> ・発注、買掛残高、仕入実績、支払 ・受注、売掛残高、売上実績、請求 ・在庫残高、受払実績、棚卸、倉庫移動 <生産管理システム> ・発注、買掛残高、仕入実績、支払 ・受注、売掛残高、売

    個別案件にオブジェクト指向は要らない - 設計者の発言
    t-wada
    t-wada 2010/11/01
    "そんな希少でスゴい人物ならドメイン駆動でvery agileに開発してくれそうだが、保守まで面倒見てくれるのか。面倒見てくれるとしたら、体のいいベンダーロックインが成就しただけではないのか。"
  • レガシーの呪いを解くには勇気が必要だ - 設計者の発言

    大きなレガシーシステムはたいてい「動いているが、なぜそのような作りになっているか誰もわからない」といった状態になっている。下手に変更すればシステムが動かなくなることを担当者は身にしみて知っている。日々の業務が動いていることのほうが重要なので「なるべくシステムを変えない」ことがシステム部門としての至上命令になっていたりする。事業を支援するはずのシステムが、その発展を阻害しているなんて悪い冗談だ。 さすがにこのようなシステムなら、もののわかる経営者であれば危機感を覚える。絶え間なく変化する市場に合わせて新しいサービスを考案して事業に組み込まねばならないからだ。変化を禁じられた事業なんて死んだも同然だ。そこで大きな予算を用意して刷新プロジェクトを立ち上げるのだが、けっきょくもともとの構造をそっくり別のプラットフォームに移し変えただけのようなシステムが出来上がることがじつは少なくない。 理由はいく

    レガシーの呪いを解くには勇気が必要だ - 設計者の発言
  • 設計者の発言−渡辺幸三ブログ

    2021年4月から、2020年以降の記事を含めて「はてなブログ」に引っ越しました。今後もよろしくお願いします。 設計者の発言(はてな版)

    設計者の発言−渡辺幸三ブログ
  • 1