Microsoft Access 掲示板

コードを意味を持たせない、の意味

6 コメント
views
4 フォロー

データベースではコードに意味を持たせてはいけない、とききますが
例えば顧客番号でCA001(Cがカスタマー、Aは顧客の頭文字)としたり
請求書番号をCA001-23001(顧客番号と2023の23と発行数)としたりするのが駄目ということですか?
顧客番号とは別に00001、00002といったIDをリレーションにつかい、顧客番号は文字と同じ扱いにする、などは問題とされませんか?

それとも顧客番号なども単純な数字だけにする、ということでしょうか?
(それですと0001の顧客や新たな顧客に発行した
番号が0015などだと、顧客が少ないと見られて不利になりそうな気もします)

さーば
作成: 2023/09/15 (金) 02:14:06
通報 ...
1
すずやん 2023/09/15 (金) 08:15:37

わたしもさほど詳しくないので想像が多分に含まれる所感として記載してみます。

>データベースではコードに意味を持たせてはいけない

「コード」を「キー」として扱う場合、まずその内容は数値のみで構成されるのが良いのはご存知のとおりだと思います。
ただ「顧客番号」や「商品番号」とする場合、数値だけでは分かりにくいので、それは「キーとしてのコード」ではなく、「意味のある管理番号」として別途追加するのが良いだろう、ということではないでしょうか。

なので「00001、00002といったIDをリレーションにつかい、顧客番号は文字と同じ扱いにする」が問題になる理由がわかりません。これはなぜでしょうか。

あと「コード」(キー)に「顧客番号」として「CA001」とした場合、後から修正できません(キーは通常修正しないので)
ただ企業などで使用する場合なにがおこるかわかりませんので、修正ができない「コード」(キー)に意味を与えるべきではない、ということではないでしょうか。

>それですと0001の顧客や新たな顧客に発行した番号が0015などだと、顧客が少ないと見られて不利になりそうな気もします

これは単純に開始番号を「1234」とかにすればいいと思いますが。
つまり意味が発生するとそういった意味でも使いにくくなるということかなと思います。

2
りんご 2023/09/15 (金) 08:43:11 935bc@0e907

>それですと0001の顧客や新たな顧客に発行した番号が0015などだと、顧客が少ないと見られて不利になりそうな気もします
 表示する必要がない。下記のように、わかりやすい形で表示する事にしたのではないのか?

数値だけでは分かりにくいので、それは「キーとしてのコード」ではなく、「意味のある管理番号」として別途追加するのが良いだろう、ということではないでしょうか。
 

3
名前なし 2023/09/15 (金) 10:45:02 77762@3d5b4

データベースではコードに意味を持たせてはいけない、とききますが

@IT: システムの寿命はコードで決まる!

そのコードが「業務で利用するコード」であるかどうかによります。

それとは別の問題として、有意コードや「後から変更される可能性がある情報」を格納するためのフィールドをテーブルの主キー(個々のレコードを一意に識別するためのインデックス)として定義することは、できるだけ避けた方が良いでしょう。

顧客番号でCA001(Cがカスタマー、Aは顧客の頭文字)としたり

顧客の名前(の頭文字)は、後から変更(改名、または誤って入力された情報の修正)される可能性があります。

請求書番号をCA001-23001(顧客番号と2023の23と発行数)としたりする

同上。

顧客番号とは別に00001、00002といったIDをリレーションにつかい、
顧客番号は文字と同じ扱いにする、などは問題とされませんか?

そういう形でよいと思いますが、それと「[顧客番号]を有意コードとするべきか否か」はあくまで別の問題です。
例えば、もし顧客の名前(の頭文字)が変更されたら、わざわざ[顧客番号]も新たに発行し直したりするのでしょうか。

4

ハンドルネームを入力し忘れました。失礼。

5
さーば 2023/09/18 (月) 23:13:02 0237b@de7c2

主キーはデータベースのもの、顧客番号や売上番号、請求書番号などは人がみるもの、という感じでしょうか?
主キーを書類などに記載するものではないので、主キーは1からはじめた自動採番、先述の各番号は、例えば10001からはじめていく、といった具合でほぼ同じようなデータをつくるのが普通ですか?

伝票や請求書に書いてある伝票番号や顧客番号、請求書番号は主キーを書くことはないものでしょうか?

6

用途や運用次第でしょうね。

例えば、マイナンバーは、一人1個で、死ぬまで変わらない、ということが保証されているので、主キーにしてもいいかもしれません。顧客番号も、一人1個で一度発行したら、絶対変更しない、ということが保証されているなら、主キーにしてもいいでしょう。
自動採番(あるいはオートナンバー型)したものを顧客番号にしてそれを主キーにするということです。
(連番にするか、ランダムな番号にするかは、状況で選択すればいいでしょう、オートナンバー型もランダムの設定があります)

ただ、自動採番されたものは意味がないのですが、それでは、人間が管理しづらい、何らかの情報を持たせたい(意味を持たせたい)ということなら、顧客番号は主キーにせずに、別に主キーフィールドを追加すべきだと思います。

例えば顧客番号でCA001(Cがカスタマー、Aは顧客の頭文字)としたり

こうする必要があるのなら、主キーは別に設けるべきでしょう。
ただ、その必要性はそれほどあると思いえません。

私が今まで設計したものは、オートナンバーを顧客番号にして主キーにしてますね。その方が設計が楽なので。
売上番号、請求書番号もオートナンバーで主キーにしてますね。

単なる数字にしておけば、顧客がみてもそれに意味があるとは考えないでしょうし、
顧客名や日付は伝票自体にデータとしては持たせるので、それを主キーに入れる必要性はないと思いますので。