コード項目の「前ゼロ」文化 [テーブル設計]
学校などでプログラムを勉強している場合には、まず遭遇しない事柄だと思います。
実際の開発現場では、時としてこういった設計のシステムに出会します。
「前ゼロ」または、「前ゼロ埋め」とは。(私の周りでは、こういう表現でした)
「5桁の数値で、123」を表現する場合、「00123」となることを、こう言います。
前にゼロを付けて数値を表現する事は、いろいろな場面であるのですが、ここではシステムでのコード項目(商品コードとか顧客コードとか)について書きます。
数値の前にゼロが付くというのは、BASICやC言語あたりから(ちょっと古いか、今時は何から始めるんだろう?)プログラムを始めた人には、あまりピンとこない事だと思います。
COBOLでの数値の表現が、こうなっていることに由来していると思われます。
COBOLでは、数値項目を桁数指定で定義します。5桁で定義した場合、その領域には、「00123」のような表現で、必ず5桁が記録されます。記録する桁数が、定義された桁数以下だった場合、上位の桁には、「0」が入ります。
現在のデータベースを用いたシステムでも、同じようなデータの持ち方になるように、設計されることがあるようです。
データベースの数値項目は、「数値」としての情報しかもてませんので、前にゼロを付けた状態は記録できません。記録できる数値の範囲がどうであれ、数値の「123」は「123」です。
では、どうするかというと、テキスト項目にします。文字なので「00123」そのままを記録することができます。
しかし、テキスト項目は、数値項目と比べて、必要な記憶容量や処理の負荷で不利になります。
古い資産の焼き直しとかでない限り、この設計は有用ではないと思います。
内部がどうなっているかは、利用者からするとどうでも良いことなのですが、時々利用者への配慮が足りないシステムに出会します。
例えば、数値5桁の「商品コード」項目があったとします。
そこで、「00123」というコードの商品を呼び出すとします。
私的には、「123」とだけ入力したいのですが、システムは「00123」と入力しなければ受け付けられないようになっています。
そこの所は、プログラムで良きに計らって頂きたい所なんですが、そうなってない物もあるわけです。5桁なら、まあ許せるかも知れませんが、これが7桁とか9桁になったら、キーボードの「0」がすぐ壊れます。
若い開発者が、古いシステムをお手本にして、何の疑問も持たずに、コード項目を文字項目で作るようになって欲しくないと、私的には思ってます。
蛇足ですが、下記のような用語があるようです。
・ゼロパディング・・・数値が規定の桁数に満たないとき、桁を0で埋めること。
・ゼロサプレス・・・前(左側)から連続する0を取り除くこと。
さらに蛇足です。
文字項目のコード項目で、後ろスペースを持つような作りにはしない方が良いと思います。
どーもSQLの条件とかでは、後ろスペースは無視されて、スペース数やありなしを判定できないような感じだったので。
コメント 0