1. ホーム
  2. sql

[解決済み] 性別(ジェンダー)のデータベース化

2022-05-24 16:18:40

質問

私は、できるだけ少ない(サイズ/パフォーマンス)コストで、ユーザーの性別をデータベースに格納したいと思います。

今のところ、3つのシナリオが思い浮かびます。

  1. イント - コード内のEnumと一致 (1 = 男性、2 = 女性、3 = ...)
  2. char(1) - ストア m , f または他の一文字の識別子
  3. ビット (ブール値) - は、このオプションに適切なフィールド名ですか?

私が尋ねる理由は、次のとおりです。 答え に書いてあるからです。 chars より小さい よりも ブーリアン .

私は、MS SQL 2008 を使用していることを明確にしなければなりません。 を実行します。 はビットデータ型を持っています。

どのように解決するのですか?

列を "gender"と呼ぶことにします。

Data Type   Bytes Taken          Number/Range of Values
------------------------------------------------
TinyINT     1                    255 (zero to 255)
INT         4            -       2,147,483,648 to 2,147,483,647
BIT         1 (2 if 9+ columns)  2 (0 and 1)
CHAR(1)     1                    26 if case insensitive, 52 otherwise

この ビット のデータ型は、2つの可能な性別をサポートするだけであり、不十分であるため除外することができます。 一方 INT は2つ以上の選択肢をサポートしていますが、4バイトを消費します。

CHAR(1) よりも有利です。 タイニーイント - は同じバイト数を取りますが、CHARはより狭い数の値を提供します。 使用方法 CHAR(1) を使うと、"m", "f" などは自然なキーとなり、代理/人工キーと呼ばれる数値データの使用と比較されます。 CHAR(1) は、移植の必要性がある場合、あらゆるデータベースでサポートされています。

結論

私ならオプション2:CHAR(1)を使います。

追記

性別カラムのインデックスは、おそらく ではない は、低カーディナリティカラムのインデックスに価値がないため、ヘルプを参照してください。つまり、インデックスが何らかの価値を提供するために、値には十分な多様性がないということです。