Je nommerais la colonne "genre".
Type de donnée Octets utilisés Nombre/Gamme de valeurs
------------------------------------------------
TinyINT 1 255 (zéro à 255)
INT 4 - 2 147 483 648 à 2 147 483 647
BIT 1 (2 si 9+ colonnes) 2 (0 et 1)
CHAR(1) 1 26 si insensible à la casse, 52 sinon
Le type de donnée BIT peut être écarté car il ne prend en charge que deux genres possibles, ce qui est insuffisant. Alors que le INT prend en charge plus de deux options, mais il prend 4 octets -- la performance sera meilleure avec un type de donnée plus petit/plus étroit.
CHAR(1)
a l'avantage sur le TinyINT - les deux prennent le même nombre d'octets, mais CHAR fournit un nombre plus restreint de valeurs. L'utilisation de CHAR(1)
permettrait d'utiliser des clés naturelles telles que "m", "f", etc, au lieu de l'utilisation de données numériques appelées clés de substitution/artificielles. De plus, CHAR(1)
est pris en charge sur n'importe quelle base de données, s'il est nécessaire de migrer.
Conclusion
Je choisirais l'option 2 : CHAR(1).
Addendum
Un index sur la colonne du genre ne serait probablement pas utile car il n'y a aucune valeur dans un index sur une colonne de faible cardinalité. Autrement dit, il n'y a pas suffisamment de variété dans les valeurs pour que l'index apporte une quelconque valeur ajoutée.
1 votes
FWIW, la question SO à laquelle vous avez fait référence concerne la façon dont .NET représente ces types en mémoire. Cela n'a rien à voir avec la façon dont SQL Server les représente. bit <= char. msdn.microsoft.com/en-us/library/ms177603.aspx
1 votes
Quel est l'usage du champ de genre ? Est-ce qu'il pourrait simplement s'agir d'une chaîne de caractères, afin que les gens puissent entrer ce qu'ils veulent ? Essayer de lister toutes les réponses possibles à cette question va être difficile.
0 votes
@ThePassenger: Je pense que l'option habituelle est en gros m/f/autre, donc oui ternaire comme vous le suggérez est bien. Vous voudrez peut-être distinguer "autre" de "non spécifié" (comme dans "Je ne dis rien", et/ou "nous n'avons pas encore demandé à l'utilisateur"). Je ne suis pas au courant de personnes de genre fluide voulant une valeur à virgule flottante avec un curseur qu'ils peuvent régler chaque jour; je suppose que la plupart d'entre eux (et d'autres personnes de genre non traditionnel) seraient heureux de simplement choisir "autre" ou "non spécifié" sur presque n'importe quel site web. Mais non, je ne pense pas que demander "sexe" au lieu de "genre" serait une bonne idée.
2 votes
@PeterCordes Je ne suis pas bien au courant de ce que signifie "gender-fluid", dans mon village, tu es soit un homme, soit une femme ... ou une vache. Si le genre est maintenant fluide, créer une échelle de valeur comme pour le son de l'ordinateur semble un peu trop demander. Dans mon pays, on demande plutôt le sexe, c'est moins compliqué. Oh, ne crois pas que nous soyons encore à l'âge de pierre, hein! Nous avons déjà découvert Dieu et nous sommes pour la plupart monothéistes depuis la dernière colonisation.
0 votes
@ThePassenger : Oui, certaines personnes ont l'impression d'être un peu des deux, ou même décident quotidiennement. Mais non, elles ne veulent généralement pas que vous stockiez cela dans un ordinateur. Comme je viens de le dire, "autre" convient très bien autant que je sache. Vous n'avez pas besoin de savoir ou de vous soucier des détails de l'identification des personnes, il suffit d'utiliser leur pronom préféré (généralement "they"/"he"/"she"). Appeler les gens comme ils veulent être appelés n'est pas un gros problème, et nous le faisons déjà pour des personnes comme "The Edge", guitariste de U2. Personne n'insiste pour l'appeler "David Evans". (de John Oliver: youtu.be/hmoAX9f6MOc?t=3m23s)
0 votes
@PeterCordes Oui, comme les schizophrènes? Hmm, je doute qu'il y ait beaucoup de choses qui approchent un ordinateur pour leur permettre cette option "eux". Et pour ce gars de U2, c'est plutôt comme un surnom, n'est-ce pas? Comme mon nom d'utilisateur ici? Dans ce cas, je garderais le champ et le varchar pour l'espace.
0 votes
@LePassager : John Oliver est un humoriste, cet exemple d'appeler les gens comme vous leur demandez de vous appeler est à moitié une blague. (Vidéo amusante à regarder, au fait.)
0 votes
Permettez-nous de continuer cette discussion en chat.
2 votes
@PeterCordes : exiger de telles choses dans le climat politique actuel donnera aux gens un avantage en leur donnant un ascendant sur les autres, dès que vous incluez un curseur de valeur flottante, quelqu'un viendra réclamer un curseur multidimensionnel. "Juste un curseur ? Vous êtes à l'âge de pierre ?"
0 votes
Malheureusement, c'est totalement impossible : Chaque type de données SQL n'a qu'une quantité finie d'états. Mais comme nous le savons évidemment, étant donné que c'est du bon sens absolu, il y a une quantité infinie de genres. Désolé, mais c'est impossible à faire.