「コード体系はユーザインターフェイスである」とはどういうことか
今、複合キー論・ID論・コード体系論が熱い!
トラックしてるけど流れが速くてついていけない。地道に整理する。
まずは羽生氏の言う「コード体系はユーザインターフェイスである」の意味がわかったと思うのでメモ。
多分こういうこと:
「コード体系はユーザインターフェイスである」とはどういうことか
- コードは、ユーザが欲しいデータを一撃で取得するためのキーである。
- コードは、ユーザが設定したいデータを一撃で入力するためのキーである。
- 要するに、コードはユーザが業務を効率的に行うための道具である。システムが内部で使うためのものではない。
- コードは一意性を必ずしも保障しない(例:「その他」を示すコード。あるいは支店間で伝票番号が重複している会社)。
- コードは不変ではない。
- よって、コードは外部キーにはなれない。
コードを捏造すると便利な状況
コードは単なるUIである(=外部キーにはなれない!)という前提に立てば、SEが名前に対してコードを振るべき状況は限定される。
- 名前が変わることがある
- 名前が重複している
- 例:ECサイトの顧客名
- 名前がない
- 例:伝票一枚にいちいち「伝票名」なんて付けるわけがない。伝票番号が必要
- コードの方が名前より入力が速い
- 例:伝票入力画面で、いちいちIMEを使って勘定科目名を入力したくない。テンキーだけで入力したい
- コードの方が名前より分かりやすい
- 例:類似の部品や製品がたくさんあるときに、名前で識別しようとするとかえってわかりにくい。違うものを発送してしまいそう
コードなんて要らない状況
以上の状況に当てはまらない場合は、ユーザに見せるコードを捏造する必要がない。resource なり event なりを、ユーザが今使っている名前で管理すればよい。
例えば倉庫が2つしかないときに、「倉庫コード」なるものを振ってみても、ユーザから見て入力や検索が便利になるわけではない。
ユーザには「札幌倉庫」「小樽倉庫」のような名前で倉庫の個体識別をしてもらえばよい。
システム内部で一意性の保障が必要なら、それぞれの倉庫にIDを振って、そのIDを外(画面や帳票)に漏らさなければよい。ユーザに見せなければよい。
ただしこれはGUI前提の考え方。
「札幌倉庫」「小樽倉庫」をコンボボックスで指定する世界の話。
COBOLだったら「1. 札幌倉庫」「2. 小樽倉庫」という選択肢を提示して、ユーザに1か2を入力させるのだろう。多分。
だから、COBOLならコードの捏造が必要。
SEが捏造したコードと、IDとの違い
SEが捏造したコードと、IDとの違いは、画面や帳票に漏れ出ているかどうかだけのこと。
GUI前提ならコードの捏造は必要ない。顧客の了承なしに、勝手にIDを振ればいい。