性別を
enum 性別CODE
{
男 =1,
女 =2,
}
と列挙体で規定することは多いです。ソース上の可読性も高いです。
でも、DB上で 1,2で保持していると、どこかで置換処理が必要になります。
性別コードって公的規定があるのですね。4種類ある!! http://en.wikipedia.org/wiki/ISO_5218
列挙体を使わずに区分マスターとして設定することもあります。
CODE='M' : 名称="男"
CODE='F' : 名称="女"
と規定しているのを見かけます。しかし、 '男','女' は1文字です。CODE値も 'M'/'F' の1文字です。
しかも、プログラムで if(code=='M'){...} if(code=='F'){...} というソースを見ると、性別マスタの存在は不要に思います。
直接 if(code=='男'){...} if(code=='女'){...} でも差は無いし、'M'.'F'を'男','女'と脳内読替しない分、可読性が高い。
同様の理屈で、要素が数個のCODEマスターの存在が引っかかります。
得意先_仕入先区分マスター : T:得意先 / S:仕入先 => '得' , '仕'
入金_出金区分マスター : N:入金 / S:出金 => '入' , '出'
受発注区分マスター : J:受注 / H:発注 => '受' , '発'
マスター化が必要だとする意見に、「コード値に対する表示名が確定できない」というのがあります。
しかし、用語辞書を設定し、 得仕_得 => 得意先 , 得仕_仕 => 仕入先 と置換すれば、表示名対応できます。
と書いてきましたが、そもそも、性別マスターや得意先_仕入先区分マスターなどの、行が増減しない固定区分って、マスター化する意味は、あるのかなぁ。
直接 'T'や'S'の値をソースで使用するのだったら(エイリアス変数を使うにしても)、マスター化しなくても良いと思うのです。
マスター化することで、プログラム内に値置換処理を書くことになります。その面でも不利。
「データ登録時の整合性チェックに用いるから必要だ」という考えもありますが、要素が不定のマスターと違い、区分の性質上、要素の増減はないので、RDBの行制約でカバーするほうが単純だと思うのです。