8

MY SQL データベースに性別を格納する最良の方法はどれですか? 人によって表現方法が異なるため、この問題については少し混乱しています。INTに保存する方が良いと提案する人もいれば、 TINYINTEnumを提案する人もいますが、男性の場合は CHAR(1) M 、女性の場合はFに保存することを提案する人もいます。

さらに、 http://en.wikipedia.org/wiki/ISO_5218を聞いていると、ますます疑わしくなります

しかし、私の観点では、ENUM よりも堅牢性が高いため、CHAR に格納することをお勧めします。また、スケーラビリティについても懸念しており、何百万ものレコードを格納するためのより良いソリューションを知りたいと考えています。

有識者からの貴重なご意見、大変有り難く存じます。

4

2 に答える 2

10

より複雑な性別の問題 (進行中の性別変更またはトランスジェンダー) に対処する必要がある場合は、可能な値の参照テーブルを使用するのが最善の方法です。

CREATE TABLE static_gender (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    Name varchar(10),
    Description varchar(100)
) ENGINE=INNODB;

最初は、次のようにロードできます。

INSERT INTO static_gender VALUES
(DEFAULT, 'F', 'female'),
(DEFAULT, 'M', 'male');

そうすれば、性別の新しい値が必要になったときに表を拡張できます。static_gender_idUSER (または何でも) テーブルで、JOIN を使用して性別の値を保存および取得します。

于 2013-06-28T13:59:32.127 に答える
5

個人的には(これはやや主観的な質問であるため)、私はENUM. CHECKMySQL は制約をサポートしていないためENUM、値がMor F(またはmor 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 つの次元に分類しようとするのは不正確であり、不正確であるとコストがかかります。

于 2013-06-20T16:18:00.040 に答える