• ベストアンサー

システムのコードについて

システムのコードについて 多チェーン店舗を持つ会社で、北海道や東北といったように、店舗をまとめてエリアと呼んでいます。 ACCESSで、簡易システムを組む場合、エリアと店舗はそれぞれコード化しているのですが、それがすべて数字のみで定義され、桁数も固定して変わる可能性が無い場合でも、コードは、DB上の項目定義を文字型で持つ方がいいのでしょうか? 考え方として、どのように考えてDB上の項目定義するべきなのか、ご意見をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

桁数はあくまでも表示の手段であって、実際のデータとは異なる場合がありますので、文字型が良いと思います。 数字は「001」や「000009」と桁数表示できますが、関数で"=[エリア]&[店舗]"と入力した場合、表示形式は無視されます。 例えば[エリア]と[店舗]を同じ3桁表示にし、上記関数での戻り値は (1)数字としての[エリア]="001"、[店舗]="011"は【111】 (2)数字としての[エリア]="011"、[店舗]="001"は【111】 (3)固定した文字型として[エリア]="001"、[店舗]="011"は【001001】 (4)固定した文字型として[エリア]="011"、[店舗]="001"は【011001】 【】の中の数字を見ていただければ(1)と(2)は同じ【111】です。 データ形式を「文字」から「数値」に変換した場合でも、頭の"0"が消されます。 その場合(1)~(4)の戻り値はすべて【111】になります。 多チェーン店舗の場合、「文字」としての「"0"(ゼロ)」を有効にしておかなければ、重複する数値が発生する可能性が極めて高いです。

その他の回答 (4)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

入力テキストボックス項目の店舗は数字のがユーザ側には扱いやすいです。 コンボボックスならどちらでも良い。 エリアと連結して1フィールド化で扱うケースがあれば そのときの店舗、エリアは前0付与し固定長の文字のが扱いやすいです。 いずれにしても内部コードが表に出ることは少ないと思います。 (レポートやフォームには店舗名や都道府県名、エリア名で出す方が・・・。) 店舗のマスタテーブルは 店舗-(都道府県)-エリアの3フィールドのコード(と名称)は必要になるでしょう。 また、店舗が決まれば、都道府県やエリアが決まる設計、正規化しましょう。 使いたい場面でどうするかが決まります。 文字型が絶対というわけではありません。

  • riveron77
  • ベストアンサー率48% (180/370)
回答No.3

> 桁数も固定して変わる可能性が無い場合でも 本当に無いですか?(笑) 私の経験では、コードとかって偉い人達の気まぐれで、結構変わる気がします。 0詰めにしたいとか、アルファベットを入れよう、とか。 この手の作業の大変さ(めんどくささw)は、偉い人にはわからんのですw クエリやアプリ側で対応もアリですが、 仕様によってはテーブルのフィールドを変えたくなる場合も。 そういう作業って面倒ですよねぇ。 そういうわけで、コードの類は必ず文字列にしています。 業務に問題なければ、こちらの判断で0詰め。 0詰めなら、画面や帳票のコード項目について、幅も一定になりますし。 (ある程度ですが) ご参考まで。

  • mhassy
  • ベストアンサー率43% (16/37)
回答No.2

どのような「項目の型定義」の前に、どのような「コード定義」をすべきかが大前提になると考えます。 ToOrisugaruさんの回答が全てを要約して説明されていらっしゃるため、私の回答はその一部の詳細になってしまうのですが、(その様な回答だと推測しました)。 コード定義をする際に、どのような知識レベルの人々がそのコードを実際に利用するのか? また、それらのデータを統合して「運用する側のレベル」についてはどうなのか? 等の点を考慮して「コード定義」する必要が有ります。 コードに文字を組み込み、一見して意味が解る(例:Hokkaido01など)様にすると、「コード表」との対比が不要なため、「プルダウンリストを使用しない、用紙での記入運用」も容易になります。 逆に、こういったアナログ的運用が想定されない場合であれば、(入力システムとしてリスト化が可能なので)数値化されている方が、データ(の項目サイズ≒フィールドの容量)として節約が可能ですし、入力者(キーパンチャー)の作業が楽になります(=数値入力だけの方が作業が容易)。 こういった、現場の実運用レベルを最優先に考慮し、次に、システム的な視点からメンテナンスのしやすさや変更発生時などの「柔軟な対応性」を判断基準にして、「コード」の割り振りを行います。 ここまで綿密に考慮することで、おのずと「コード」に含まれる文字・数字が決まるので、それにあわせた「コードの定義」となります。 御質問に有るような「システム」を構築する側は、どうしても「システムありき」な発想になりがちですが、こういったシステムは「入り口ありき」でデータが発生⇒蓄積⇒利用されるものです。 「発生と蓄積」という、頻度が高く&精度が要求される部分を、いかに運用し易い設計にするかが、発想の開始点(前提条件)となる・・・と考えます。 次に、システムのメンテその他の「裏方側の事情」を考慮した場合、「エリアのコード」以外についてもいくつかコード化されたデータを同時に扱うと推測します。 この「他のコード」についても同様の配慮の後にコードが決定されるはずです。 こうした複数のコード(表)を扱う場合、Aのコードは数字、Bのコードは文字・・・ システム設計や運用・メンテ側では「データ型の混在」は扱いにくくなり、ToOrisugaruさんの御指摘の通り、バグの原因となりやすいものとなります。 勿論、以上の考え方はDBの規模や、利用・運用される環境次第ではありますが、以上の点を考慮すると「コードは文字型で統一」する方が無難だと、個人的な経験上で考えます。

回答No.1

なるべくその項目属性に適した属性でもつのがベストだと思います。 何故なら、厳密に定義したほうがコンピュータにとって負荷が軽くなるし 他の人がその項目属性を見ただけで、仕様が解りやすいからです。 仕様が解りやすいということは、それだけバグが発生しずらくなります。

関連するQ&A

  • access97とSQLserver6.5間のデータ連携

    access97とSQLserver6.5を用いたシステムで、SQLのDB内にあるマスタから複数個の項目を抽出し、別のデータ(これもSQLのDB内にあります)へ書き出しを行なおうとしています。 その際、accessのフォームから insert into 命令をかけて実行しているのですが、受け側 の項目の桁数が送り側の桁数よりも小さい場合、エラーがでてしまいます。 同じ事をSQLのクエリーツールで実行させるとできてしまうので、訳がわかりません。 アドバイスいただければ幸いです。 よろしくお願いいたします。

  • JANコードを元に戻したい

    エクセルのデータをアクセスのテーブルにインポートしているのですが 桁数が大きすぎる数値がおかしくなってしまったので、元の数値に戻したいのですが 何かいい方法はありますか? 数字の羅列(JANコード)なのですが、「4.9027051171e+012」このようなのに変換されてしまいました。 元に戻す方法があれば教えてください。

  • 汎用機からのデータ移行

    汎用機からUNIXサーバへのシステム移行を予定しています。 サーバ側のDBとしてORACLEを採用予定です。 汎用機側で使用しているDBの内容を、サーバ側に合わせコード変換した後に CSVファイルとしてサーバに転送し、ORACLEのDBにロードして初期DBの 構築をおこなう予定です。 (ロードには付属のユーティリティ(ローダ)を使用予定) この際、ORACLE側でデータ型を’NUMBER’で定義している項目に対しては、 CSVファイル側の該当項目と桁数を合わせなくても問題は無いでしょうか? 例) ・ORACLE 側の定義 商品コード  CHAR(3) 定価   NUMBER(5) ・CSVファイルの内容  A01,1500 B01,100 それとも、桁数を合わせ ・CSVファイルの内容  A01,01500 B01,00100 としなくてはならないのでしょうか? もう一点、 全角文字は、CHAR属性の項目に、シフトー度付きでセットすればよいのでしょうか? どうぞ宜しくお願いいたします

  • Accessシステムオブジェクトの編集

    Accessにてテキストインポートウィザードにて固定長を定義した情報がシステムオブジェクトテーブルに存在するのですが、そのテーブルを編集したいのですが編集できません。 テキストインポートウィザード上であると項目が多いと編集が面倒なのでテーブルの形式にてexcelからの貼りこみなどを実施したいのです。 どなたか教えてください

  • 勤怠のシステム

    パソコンで出勤簿を管理する、勤怠システムについて教えてください。 チェーン店の場合なんですけど、 本部で管理し、各店舗でも管理するんですけど、 勤怠システムって本部で3年分くらいサーバー保存できるもんですよね? 店舗でも、コピーして3年分保管しているんですが…、正直無駄だと思うんですが… そもそも、勤怠システムのメリットとは何なのでしょうか?

  • アパレル業界のシステム導入動向

    アパレルチェーン店の日締め作業にはどのようなものがありますか? 特に、日報で報告している数字の項目などが知りたいです(売上のほかに何かあれば)。 また、売り上げなどはPOSで管理しているものですか? それともまだPOSやシステムを導入していないところも多いのでしょうか? 業界の動向を教えて下さい。

  • 赤ちゃん用品店 

    赤ちゃん用品 チェーン店ですと赤ちゃん本舗、西松屋、しまむら、べびザラスなどありますが 北海道、東北、九州には店舗が少ないと思います。 こちらの地域の方はベビー用品を購入する場合、どこに行かれてますか?

  • Smartyを用いたコードの書き方について質問です

    Smartyを用いたコードの書き方について質問です お世話になります。 MySQLから得たデータをできるだけシンプルなコードで以下のように表示したいのですが、 smarty(PHPも)初心者なので苦戦しています。 完成イメージはこんな感じです。 「~件」は登録されているデータ数です。 ------------------- ■北海道、東北(全1件) 北海道(0件) 青森(0件) 岩手(0件) 宮城(0件) 秋田(1件) 山形(0件) 福島(0件) ■関東(全8件) 茨城(1件) 栃木(0件) 群馬(1件) 埼玉(1件) 千葉(1件) 東京(5件) 神奈川(0件) ■中部(全5件) 新潟(0件) 富山(0件) 石川(0件) 福井(0件) 山梨(0件) 長野(1件) 岐阜(0件) 静岡(0件) 愛知(4件) ---以下省略--- ------------------- 都道府県だけなら{foreach}で問題なく表示できるのですが、 その途中に「■北海道、東北」や「■関東」など地域を挟み込もうとしているため、 普通にループさせることができません。 こういった場合、どのようにすればシンプルにできるのでしょうか。 ご教授いただけたら幸いです。 現在ここでストップしています。とりあえず参考までに。。。 ---area.php--- ---前省略--- $rst = $DB->execute("SELECT * FROM prefec"); //都道府県を取得(47都道府県の番号、名前、登録データ数) while($row=$rst->FetchRow()){ $prefec[] = array( "prefecid"=>$row['prefecid'], "prefecname"=>$row['prefecname'], "prefeccnt"=>$row['cnt'], ); } //地域を取得(7地域の番号、名前、登録データ数) $rst = $DB->execute("SELECT * FROM tblarea"); while($row=$rst->FetchRow()){ $area[] = array( "areaid"=>$row['areaid'], "areaname"=>$row['areaname'], "areacnt"=>$row['cnt'], ); } $smarty->assign("area", $area); $smarty->assign("prefec", $prefec); $smarty->display("area.tpl"); ------ ---area.tpl--- -中略- //地域を表示 {{foreach from=$area item="area"}} <a href=hoge.php?areaid={{$area.areaid}}">{{$area.areaname}}</a> (全{{$area.areacnt}}件)</div> {{/foreach}} //都道府県を表示 {{foreach from=$prefec item="prefec"}} <a href="hoge.php?prefecid={{$prefec.prefecid}}">{{$prefec.prefecname}}</a> ({{$prefec.prefeccnt}}件)</div> {{/foreach}} ------ とうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ISBNコードについて

    ISBNコードの仕組みはなんとなく知っているのですが(過去の投稿などでも勉強して) ISBN○-△△△-□□□□□-◎ の場合 ○は国番号   △は出版社記号   □は書名記号  ◎はチェック数字 となっているんですよね。 そこで質問なんですが、たとえば出版社記号が6桁の出版社の場合、書名記号に使える桁数は2桁ということになるんですよね。ということは最大99しか出版できないということになってしまいます。 足りなくなったりしないんでしょうか? 足りなくなってしまった場合、どうするのでしょうか?

  • パスワードとユーザー名の限界について

    はじめました。 現在、DBを監視する為の定義ファイルを設計しています。 その定義ファイルの設定項目にパスワードとユーザー名 のエリアがあるのですが、サイズをいくつとればいいか力不足のため、わかりません。 オラクルのDBの場合、パスワードとユーザー名の限界の文字数をご存知の方がいましたら、教えていただけないでしょうか。宜しくお願い致します。