1|2|3データベースをコードに依存しないように設計するさて、コードはできました。次はデータベースを設計します。コードがずっと同じ体系であれば何も考えずに設計できるのですが、残念ながらこの世は無常です。コードがパンクしなくても、業務・システム統合のためにコードを統一するという前向きな事情によりコード体系を変えることもあります。そこで本稿では、「データベースをコードに依存しないように設計するためにはどうすればよいか」に重点を置いて、注意すべきポイントを解説します。解説の際にケーススタディとして、図1のように書店の販売システムとクライアント企業の購買システムが連携する場面を利用します。販売システムと購買システムが連携するケース(1)業務で利用するコードを主キーとして利用することは避ける業務で利用するコードをテーブルの主キーとして利用することは、コード体系とデータベース設計を独立させるという観点からできるだけ避けるべきです。図1のケーススタディでは、書籍テーブルがありますが、これの主キーとしてISBNコードを利用すべきではないということになります。書籍テーブルのスキーマそもそも主キーとして求められる特性は以下に挙げるものです。値の変わらないものできるだけけた数が短いもの複合キーとなる場合、連結が多くならないもの必ず存在するものコード体系は変化し得るという前提に立つと、コードは「値の変わらないもの」という特性を損ないます。有意コードであればけた数が長くなりがちなので、「できるだけけた数が短いもの」という特性も損ないます。従って業務で利用するコードはテーブルの主キーとしてはあまり適切ではありません。顧客・受注といったエンティティはほかの多くのテーブルと結合されるため、顧客ID・受注伝票番号といった項目が業務上利用されている場合は、これを顧客・受注といったエンティティでは主キーとしては利用せず、主キーとなる項目をデータベース内に閉じたものとして別途用意すべきです。参照される機会が少ないような場合は、わざわざ主キー用の項目をシステム内で用意しないという判断も時に必要です(分類用のテーブルを切り出す場合など)。(2)プログラムで条件判断や検索に利用し得る有意コードは分解する有意コードでは、複数の意味や何らかの分類をコード内に持ちます。プログラム側では有意コードを条件分岐や検索に利用する場合、複数の意味が1つの項目にまとまっていると不便です。そのため、プログラムに利用される有意コードは意味ごとに分解すると処理が容易になります。書籍の分類をプログラムで利用する場合(3)システム連携で使用されるコードの取り扱いには注意する業界標準コードというものがあることからも想像できますが、業務で使用されるコードは企業間の業務・システム連携でも用いられることがあります。ケーススタディでは、クライアント企業側の発注データの中にある伝票番号を、納品書の印字や請求データに入れて、クライアント側の発注記録と突き合わせることに利用します(図2)。企業間の業務・システム連携で利用されるコードそのため、クライアント企業で採番された発注管理番号を書店の販売システムのデータベースに保持する必要があります。クライアント側のコード体系がどのようなものでも対応できるよう、数十〜100程度のけた数を用意します。当初他社との連携がないシステムでも、将来その可能性がある場合はあらかじめ他社のコードを入れる項目を用意しておくべきです。データベース設計の際は、コードに依存しないよう以下の点に注意する。業務で利用するコードを主キーとして利用することは避けるプログラムで条件判断に利用し得る有意コードは分解するシステム連携がある場合、外部システムから受け取るコードの格納場所を確保するまとめ以上、コード設計の手法を解説しましたが、私はコード設計という経験を通してデータベースエンジニアは2つの能力を高めることができると考えています。1つ目は「ビジネスを理解する力」です。コードはビジネスモデルを色濃く反映します。どんなコードが必要か、それぞれのコードにはどのような分類を埋め込むべきかを判断するためは、ビジネスを理解することが必要です。2つ目は「将来のビジネスを予測する力」です。コード設計というものは、現在必要なシステムを作るだけでよいのであれば、いいかげんにやってもさほど困ることはありません。多くの場合、将来のビジネスの拡大、変化の中でも使い続けられるシステム、つまり「寿命が長い」システムであることが求められます。いったシステムを作るためには、コード設計を適切に行う必要があります。最後に、読者の皆さんが今後コード設計に取り組む際に、この記事が何らかの役に立ち、そして、その経験を通じてデータベースエンジニアとしてさらに成長していただければ幸いです。次回は「データへの最短ルートを確保せよ!」というタイトルで、大量のデータの中から目的のデータを効率よく検索するためのテクニックを紹介します。筆者プロフィールアクセンチュア・テクノロジー・ソリューションズアクセンチュアから生まれた、企業改革のためのシステム開発を手掛けるエンジニア集団。安間裕が代表取締役社長を務める。下平浩由はネットワーク、データベースなどのインフラ/ミドルウェアに精通したシニア・システム・アナリスト。ネットワークエンジニア、Javaシステム開発者を経て、現在はパッケージシステムの分野でSAPの導入に携わっている。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。