[解決済み] 性別(ジェンダー)のデータベース化
2022-05-24 16:18:40
質問
私は、できるだけ少ない(サイズ/パフォーマンス)コストで、ユーザーの性別をデータベースに格納したいと思います。
今のところ、3つのシナリオが思い浮かびます。
- イント - コード内のEnumと一致 (1 = 男性、2 = 女性、3 = ...)
- char(1) - ストア m , f または他の一文字の識別子
- ビット (ブール値) - は、このオプションに適切なフィールド名ですか?
私が尋ねる理由は、次のとおりです。 答え に書いてあるからです。 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)を使います。
追記
性別カラムのインデックスは、おそらく ではない は、低カーディナリティカラムのインデックスに価値がないため、ヘルプを参照してください。つまり、インデックスが何らかの価値を提供するために、値には十分な多様性がないということです。
関連
-
[解決済み] Oracle Trigger ORA-04098: トリガーが無効で、再バリデーションに失敗しました。
-
[解決済み] PostgreSQLのCREATE DATABASE IF NOT EXISTSをシミュレートしてみませんか?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] SQLでランダムな行を要求する方法は?
-
[解決済み] MySQLデータベースに緯度/経度を格納する際に使用する理想的なデータ型は何ですか?
-
[解決済み] Selectステートメントで特定のフィールドの重複を検索する
-
[解決済み] データベースのカラムに区切りリストを格納することは、本当に悪いことなのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
plsql-stored-procedure ORA-06550 エラー処理
-
MHAの高可用性構成とフェイルオーバー
-
windows mysql prompt access denied for user ''@'localhost' to database.
-
[解決済み] LINQでInclude()は何をするのですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] テーブルネーミングのジレンマ:単数形と複数形の名前【非公開
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] 最初の行への結合方法
-
[解決済み] SQL Server 2008を使用してIDENTITY_INSERTをオン/オフする方法は?
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する