川村渇真の「知性の泉」

将来の拡張や使い勝手を考慮したコード設計


 データベースの構築では、ソフト上でフィールド定義を入力する前に、どんなコードを使用するか決めなければならない。従業員番号や商品番号のように重要なコードは、設計が悪いと余分な修正作業や混乱を招く。たとえば、桁数が不足して新規データを入力できないとか、何のコードなのか分からないとかだ。コードを後から変更しようとしても、重要な項目ほど影響が大きく、現実には困難だ。こんな失敗を避けるためには、十分に考慮してコード体系を決める必要がある。コード設計の注意点はある程度決まっているので、簡単なものを中心に紹介する。


●標準コードを参考にしながら、自分用コードを設計する

【内容】各項目のコードを決めるときには、標準化されたコードがないか最初に調べる。取引先コードや業種コードなど、どの企業でも用いる項目なら、たいていは標準化されたコードが存在する。JIS規格を調べるとか業界団体などに問い合わせるなどの方法で、コードの存在は簡単に分かる。標準コードが分かったら、そのまま使えないか検討する。データ自体の入手が有料の場合もあり、それも含めて考える。もしダメと判断しても、標準コードの考え方を参考にして独自コードを設計する。十分に検討した標準コードを参考にすることで、とんでもなく悪い独自コードを作ることは少ない。
【理由】独自のコードを採用したデータでは、別のデータと付き合わせるときに問題が発生しやすい。コードが異なるため、同じデータを見付けるのが難しいからだ。標準化されたコードを採用することで、一致する可能性を高められ、無駄な変換作業を回避できる。また、標準コードをほとんどは、多くの専門家が検討して決めたものなので、素人が作るよりも出来はよい。独自のコードを採用するにしても、いろいろな点で参考になる。とくに役立つのが、「職業分類」や「商品分類」など、素人が考えても簡単には思い付かない項目だ。コード設計での大きなミスを防ぐ意味からも、標準コードは調べる価値はある。
【作成上の注意点】標準化されたコードの多くは、数字だけで作成してある。そのため、それを必ず使ったほうがよいとは限らない。たとえば、都道府県のコードなら、数字だけで入力するよりも都道府県名のテキストのほうが分かりやすい。全体での使い勝手を考慮して、どちらを採用するのか判断すべきだ。
【参考】JIS規格の内容は、「JISハンドブック」という形でまとまめられ、日本規格協会から出版されている。多くのコードは、大分類・中分類・小分類というように体系化されており、数字を使ったコードがほとんど。

●値からデータの種類が識別できるように接頭文字を加える

【内容】キーとなる項目では、値から項目の種類を識別できるようにコードを設計する。もっとも簡単なのは、アルファベットの1または2文字をデータの先頭に付ける方法。たとえば、顧客番号なら先頭に「C」を加えて、「C000001」や「C123456」とする。意味を連想しやすいようにと、英語で顧客を意味する単語の「Customer」から頭文字を取って「C」とした。識別用の文字をすべてのキー項目に付けると、値を見ただけで何のデータなのか分かる。当然のことだが、異なる項目に同じ文字を付けてはならない。
【理由】企業内では、いろいろな情報をデータベース化して保存する。自動採番を利用した項目が増えると、違う内容で似たような番号が何種類も発生する。別な項目のデータと間違う可能性は、扱うデータの種類が多いほど大きい。余分なトラブルを避ける意味から、データを区別する方法が必要。簡単な方法ながら効果が大きい点もメリットの1つ。
【作成上の注意点】識別用に文字を加える方法なので、もっとも大きな欠点は、入力する文字数が増加することで、データ量が多い場合には無視できない。そこで、使用頻度の高い項目には1文字のアルファベットを、低い項目には2文字のアルファベットを加える。また、システムの設計では次の2点を考慮する。まず1つは、新規データを入力する機能で、可能な限り自動採番を採用する。もう1つは、データ更新や検索機能で用いるもので、先頭の文字を入力しなくて済むように作る。これらを徹底すれば、桁数の増加による欠点を十分に補える。ただし、データベース・ソフトのごく一部には、自動採番の機能を用いたとき、先頭に固定文字を加えられないものもある。ソフト選びの際には、この点も考慮したい。

●予測外の増加も考慮して、キー項目の桁数に余裕を持たせる

【内容】会員番号や商品番号などキーとなる項目では、桁数が不足して困らないように、余裕を十分に持たせる。どの程度の桁数が必要かは、最悪の状況を考慮して決める。どの程度の数まで増えそうなのか、市場やユーザーの数を参考にしながら計算する。パソコン・ソフトのユーザー番号なら、これまでのマシンの販売台数を調べれば、それが最大時の数となる。ただし実際には、その中の一部だけが対象となるので、何%になるかを多めに予想する。ここで重要なのは、具体的な数値を求めるのではなく、桁数を決めるという点だ。そのため、最終的には何桁の数字になるかだけが分かればよい。
【理由】後から簡単には変更できない項目なので、最悪のケースまで考えて桁数を決める。桁数の増加により入力の手間が増えても、システム全体を大幅に修正するよりはマシだ。1桁ぐらい多めにすることで、最悪の事態を避けられる。
【作成上の注意点】桁数が多いと困るのは、入力の手間が増えることだ。入力では自動採番を採用するなど、各機能の設計でカバーする。

●キー項目には、チェックサムを加える

【内容】会員番号や商品番号のように重要なキー項目では、数値の入力ミスを発見するために、チェックサムを加える。値の各桁から計算した1〜2桁の数字を、値の最後に付加する。1桁よりも2桁のほうがミスを発見しやすいが、入力文字数は増える。データ数が多い項目なら、1桁で十分だろう。
【理由】値の入力ミスで一番困るのは、データを更新するときだ。キー項目の値を入力して、更新するレコードを呼び出す。キー項目の値が連番だと、1つの数字を入力ミスしても該当するレコードが見つかり、そのまま気付かずに更新すれば、間違ったデータになる。これを防ぐためには、入力ミスを発見する仕組みが必要だ。余分な入力が増えるだけに、重要なキー項目だけに付ける。チェックサムの計算方式では、各桁の数字が間違った場合だけでなく、隣り合う桁の数字が入れ替わった場合でも発見できることが大切だ。順序を逆に入力するミスが、コンピュータの入力では比較的多いからだ。
【計算式】ほとんどのデータベース・ソフトには、チェックサムを付加する機能がない。そのため、ユーザーが自分で作成する必要がある。処理速度を低下させない意味から、ビット操作のような複雑な計算は非現実的であり、四則演算で実現するしかない。もとの数値から1桁ごとに分割して数字を取り出し、それぞれに異なる値を乗算して、合計値を求める。具体的には、次のような式になる。各桁の数値をABCDEFとすると、式は「A×1+B×3+C×7+D×9+F×1」となり、この計算結果の下1桁をチェックサムとして加える。「1、3、7、9」が乗数で、元データが5桁以上なら、これらの乗数を繰り返す。かなり簡単な計算式なので、計算時間が短く、それでいて入力ミスの発見効果は大きい。
【作成上の注意点】自動生成する機能に自由な式を指定できないデータベース(ほとんどが該当)では、自動生成した項目とは別に、チェックサムを付加した項目を加える。チェックサム付きの項目は、生成した値から計算して求める計算項目として定義する。チェックサムを付加した項目では、付加した結果を値として扱う。データ入力のレイアウトだけでなく、表示や印刷まで含めて、チェックサム付きを項目の正規の値とする。両者を区別するためと、どちらが正規の項目なのかを明示するために、フィールド定義では、チェックサム付きの項目に正規の名前を付ける。たとえば、「会員番号」と。逆に自動生成した項目には、「会員番号元」のように「元」と特別な文字を付加して、正規の項目と区別する(図1)。
【ソフトへの要望】このようなチェックサムを付加する機能は、データベース・ソフトが標準で持つべき機能の1つである。フィールド定義に含め、生成方式や桁数を選ぶだけで済むようでなければ、十分とはいえない。このような重要な機能なのに、データベース・ソフトが備えていないものがいくつかある。そして、今後に備える気配すら見あたらない。データベース・ソフトの設計者には、重要な視点が何か欠けているように思える。

図1、自動採番の元データから、チェックサムを加えた項目までの、フィールド定義の例。「取引先コード」のフィールド名がチェックサム付きの項目で、「取引先コード元」が自動採番の項目。途中にある「取引先コードCS」は、チェックサムを求めるための中間項目で、計算式が長いために加えたもの。理想的には加えないほうがよい。

図1

●数値や英字を区切って、入力や読みとりを正確に

【内容】桁数がかなり多いキー項目で、データの更新などで入力する機会が多いなら、入力しやすいように、4〜5桁ごとに区切りの印を入れる。ハイフンが一般的で、「C012-34567-89012」とする。区切り位置と各部の桁数を決めるルールだが、基本的には4桁または5桁ごとに区切り、それが無理なときだけ3桁を混ぜる。何桁で区切るかは、全体の長さを考慮して決める。たとえば、数字が10桁なら5桁+5桁で区切るが、11桁になると4桁+3桁+4桁にする。この場合、どの部分を3桁にするかは、適当に選んで構わない。もし各桁に意味を持たせているなら、その意味に合わせて区切り位置を決める。何桁以上なら区切りを入れたほうがよいも、重要な考慮点だ。6桁以下なら入れる必要がなく、10桁以上なら入れたほうがよい。難しいのは7〜9桁だ。ハイフンの分だけ入力の手間が増えることも考え合わせ、読みやすさを優先するか、入力の手間の軽減を優先するかの判断になる。
【理由】数字の桁数が増えるほど、入力ミスが起こりやすい。大きな原因は、数値を読み取るときに区切りが付けづらいからだ。日本語の文章でも、ひらがなが長く続くと、区切りを見付けにくくて読みづらい。適度に漢字やカタカナが混在するとともに、句読点で節目を区切ってあるからこそ、すんなりと読める。数字の連続も同様で、ある程度の桁数で区切ったほうが、読み取りやすいとともに入力しやすい。金額の表示で3桁ごとにカンマを付けるのも、同じ理由から。もし項目の値が、「1234ABC5678」のようにアルファベットと数字が数個ずつ連続しているなら、アルファベットと数字の境目が区切りとみなせるため、ハイフンを入れる必要はない。ただし、アルファベットが1〜2桁だけ先頭に付いている場合は、数字とアルファベットを区別せず、区切りを決める。その際、「CS12-34567-89012」のように、アルファベットを含んだ部分の桁数を優先的に少なくする。
【作成上の注意点】既存のデータベースソフトでは、区切り文字を入れる機能を標準でサポートしていない。そのため、ユーザーがハイフン付きのデータを用意する必要がある。一般的には、自動採番で生成した項目とは別に、ハイフン付きの項目を計算項目として加える。その計算式の中で、ハイフン挿入の処理を定義する。ハイフン付きを正規の項目とし、すべてのレイアウトでハイフン付きの項目を用いる。フィールド定義での名前も、ハイフン付きのほうが正規だと分かるように付ける。

●値一覧の項目では「データなし」や「不明」も含める

【内容】血液型や性別のように決まった値しか持たない項目では、あらかじめ値を登録しておき、その中から選ばせる形で入力する。その際、決められた値が入力できない場合も考慮し、「不明」や「データなし」などの項目を追加する。どんな言葉にするかは、項目の内容によって決める。血液型の項目なら、「データなし」はあり得ないので、「不明」を用いる。
【理由】値一覧のフィールドでは、記入漏れなどの理由で元データがない場合も考慮する。不慣れな人がデータを入力するケースでは、入力データがないときにどうすればよいのか、迷わなくて済むメリットがある。それでも迷う人がいるなら、入力レイアウトに短い説明を加えて対処する。また、値一覧の項目で一度入力した値を消す場合、一覧データから選ぶ操作方法ではできない。「データなし」などの値が選択が可能だと、入力操作が簡単になる。さらには、空のフィールドを検索できないソフトでは、「不明」や「データなし」の項目があると、空の検索と同じ機能を実現できる。もし空の状態を検索できたとしても、実は半角や全角のスペースが入っていることもあり、通常の表示では区別できないため、発見はほとんど不可能だ。空という状態を使うのではなく、空と同じ意味の値を用意すべき。この場合、空の状態を作らないために、フィールド定義で必須入力(または空欄不可)を設定する。
【作成上の注意点】決まった値しか入力しない項目では、データベース・ソフトのフィールド定義で、「値一覧」や「固定値リスト」などの機能を用いる。必須入力の項目では、入力作業を軽減するために、どれか1つをデフォルトの値として設定する。そのとき、「データなし」も含めて、発生頻度がもっとも高い値を選ぶ。

(1996年9月23日)


下の飾り