個人的には(これはやや主観的な質問であるため)、私はENUM
. CHECK
MySQL は制約をサポートしていないためENUM
、値がM
or F
(またはm
or f
) であることを実際に確認する唯一の方法は です。私にとって、それが最も重要なポイントです。
さらに、 は( docsENUM
によると) 1 バイトのストレージ スペースしか必要としないため、ストレージに関してはorと同じくらい効率的です。CHAR(1)
TINYINT
TINYINT
次のようなクエリになってしまうため、アプローチがまったくわかりません。
SELECT * FROM myTable WHERE gender = 1;
男性ですか1
、女性ですか?また、男性なら女性0
ですか?それとも2
?それとも多分16
?アプリケーションを作成 (および維持) するためには、既に大量のことを覚えておく必要があります。その山に追加する必要はありません。
補遺 2017-12-01 by Ed Gibbs: 無関係な Google 検索で偶然出くわしたときの回答を再検討しています...
このENUM
アプローチは、値の静的な 1 次元ドメイン (Y/N、To/Cc/Bcc など) を使用するユース ケースではメリットがありますが、性別には有効ではありません。私の答えは、性別の定義のより広い文脈ではなく、「列をどのようにMまたはFに制限するのですか」というオタクの文脈でした。
D Mac の解決策はより堅牢で啓発的ですが、ジェンダーが多次元であるのに対し、それも一次元であるため、まだ不完全です。
人間を主観的なカテゴリー (性別、人種、階級的アイデンティティー、宗教、政治的所属、雇用状況、民族的アイデンティティー、性的嗜好、好色など) に分類する場合、彼らが自分自身を識別する複数の方法を考慮してください。「1 つのボックスにチェックを入れる」という解決策が常にあるとは限りません。
これはイデオロギーを超えています。多次元エンティティを 1 つの次元に分類しようとするのは不正確であり、不正確であるとコストがかかります。