やる気がストロングZERO

やる気のストロングスタイル

性別カラムを1,2で用意するとき、1が男, 2が女だという情報をどこに持つか

性別カラムを1,2で用意するとき、1が男, 2が女だという情報をどこに持つか。

user情報テーブルに性別カラムを用意して男女を1or2で保持させる場合、1が男、2が女である情報をどこに持つのがよいか以前議論になったのを思い出した。

システムで「性別」の情報を扱う前に知っておくべきこと - Qiita
こういう話もあるけど、今回提示した「性別カラム」は例であって、この記事に記載されているようなことは一旦考えない

案A: コード上に持つ。

個人的観測範囲でよく見かける。
DBには1, 2という情報しかなく、アプリケーションコード側に対応表を持たせている(dictデータ構造で'男' => 1, '女' => 2など)
DBで持ってもレコードが追加されることも、値が変更されることもまずない。更新されることがないのであれば、変化するDBへ持っておくメリットはなく、定数としてコード上に埋め込んておくほうがよい、というような意見だった気がする。

案B: テーブルでデータを持つ。

性別マスタテーブル(1, 男 2,女の2レコードのみ)を持つ。
個人的にはこちら派。

自分が案Bが良いと思う理由。

案Aの場合、DBだけ見た時1が何なのか、2が何を意味するのかわからない。
案Bの場合、DBだけで意味が理解できる。
「DBの寿命はコードよりも長い」に従って、仮にアプリケーションコードが死んで、DBだけ生き残って引き継がれた場合、案Aだと一部の情報が失われてしまうあたりが「それでいいのか?」と気になっている。
そんな状況、実際どれくらい発生するねんって話ではあるけど。

案Aの場合、未定義の値(例えば99等)が入れられてしまうことが可能。
案Bの場合、外部キー制約で1or2しか入らない。これが大きいと思っている。