注目キーワードDFDDB設計w2uiHOMEICTサロゲートキーによるDB設計についてサロゲートキーによるDB設計について2017年2月12日2019年6月25日ICT2756回0件ICTサロゲートキーによるDB設計について。データベースを物理設計する段階で、主キーが複合キーとなってしまう場合に、どうするかを検討したことがあるだろうか?私の周りでは、何の気なしに複合主キーを用いた設計が氾濫している。たしかに、業務上でユニークなキーを使って論理設計をしているものだから、そのまま実装するのが余計な時間もかからないし、誰が見ても(?)わかりやすい実装になるかも知れない。複合主キーが氾濫していると、SQLが複雑になり、それがバグの温床になったり、更には、ひとたび業務変更がおきると、対応のために複雑なSQLを解析したり、DBに大幅なデザイン変更が発生したり、と後々のメンテナンスには目に見えない大きな影響を及ぼしたりします。実際の開発現場ではサロゲートキーが有利な場面が多い「サロゲートキーを使うのは議論のあるところ」みたいなのをよく目にしますが、実際の開発現場ではサロゲートキー(代替キー)を用いた設計の方が圧倒的に有利な場面が多いのは間違いないでしょう。この記事では、サロゲートキーを用いた設計手順と、複合主キーとの比較例を合わせて説明しています。そもそもサロゲートキーを使ったことが無いという方は一度チャレンジしてみていただきたいと思います。使ってみてはじめて、メリデメが理解できると思います。近年のフレームワークではそもそもサロゲートキーとしてid項目を実装するのを前提として開発されているものが多く、知識としても知っておきたい事項であることも事実です。サロゲートキーを用いた設計手順さて、実際のサロゲートキーを用いた設計方法について手順を追って説明したいと思います。モデリングを行います。論理モデルとしてサロゲートキーを意識せずにモデリングをしてください。(これは説明するまでもありませんね。)論理モデルが出来上がりましたら、次は物理モデルとしてサロゲートキーを検討していきます。いう項目を新規に追加して、これを主キーとします。主キー候補だった項目にはユニーク制約インデックスを作成します。親テーブル名+”_id”という名称の項目を追加します。この項目は親テーブルのidと同じ属性です。論理設計の例:物理設計の例:ポイント(1)外部キーとなる項目は親テーブル名+”_id”というルールにします。(2)サロゲートキーの採番は、自動インクリメントでもよいが、個人的にはUUIDを推奨します。これは他のテーブルのキーと比較した場合でも一意を保証されるからです。(3)クラスター化インデックスは、サロゲートキーではなく、業務上で塊になっていてほしい項目を用いたインデックスにした方が良いかもしれません。(4)業務上でユニークとなる項目を使ったユニーク制約インデックスを作成します。以下に簡単な例を挙げてみます。複合主キーのSELECT文の例:このとき、データ一覧を出力する際に、このようなSQLなどになるでしょう。'X'では、サロゲートキーに置換した例も見てみます。'X';JOINのキーがすべてテーブルのIDで結合しているのがわかるでしょうか。次に構成マスタの必要数量に1をセットするUPDATEを比較してみましょう。それぞれ主キーでレコード選択をします。業務変更時の比較それでは最後に、業務変更があって、部品マスタに輸入と国産の区別が追加された場合を考えてみます。'X'いかがでしょうか?このように業務に変更があった場合でもテーブルやSQLの変更が少なくて済みます。簡単ですが、メリットとデメリットを比較してみます。・テーブルをそのまま見たときに、業務的なデータが見られる。・何がキーなのかわかりやすい。・SQLの結合がバグの温床になる。・主キー検索で複数対象の値指定ができない。‘b’)のような使い方ができない。・アプリケーション上でユニーク値の保持処理が煩雑になる。・コード値の構成変更などの業務変更に弱い。・テーブル間の依存関係を弱めることができるので、仕様変更に強くなる。・テーブル結合SQLが簡単になることで、バグが減り、コードを速く書ける。・フレームワークでよく使われている。・論理設計上に必要ない項目を設計する必要があり、扱い方を理解するのに少し時間がかかる(?)。・外部参照している場合は、結合しないと関連が分からない。・余計な項目が増えてディスク容量を圧迫する。(ホントかいな?実際にやって見るとわかるけど、複合主キーをサロゲートキーに変換すると各エンティティで保持する項目が少なくなる事が多い。)以上、「サロゲートキーによるDB設計について」でした。潰瘍性大腸炎が再燃したので、半日断食してみた。アプリで無線LANの電波状況を確認して改善しようICT2018年9月9日2019年6月25日サイクロマティック複雑度で、外注したプログラムのソースコードの品質を判定する方法DFDDB設計w2ui最近の投稿DX(デジタルトランスフォーメーション)の基本はペーパーレス化PMP(PMBOK6版)試験に合格しました。それまでに、どうやって勉強したかのメモを公開します。PMP試験を受験して、2回目で合格しました。