lt. Normalisierung sollte das schon in eine eigene Tabelle. Würde ich persönlich nur in bestimmten Fällen machen: Wenn das Geschlecht nur eine optionale Angabe wäre, die in den seltensten Fällen angegeben wird und es wirklich um das letzte Byte ginge.
Ansonsten kauft man sich da nur eine aufwändigere
SQL Abfrage ein.
Ich würde eine eigene Tabelle anlegen. Stell Dir nur vor, die Bezeichnung soll später geändert werden (z.B. "männlich" und "weiblich" statt "Mann" oder "Frau"),
das ist primär eine Sache des Views - nicht der Datenbank.
ist es dann günstiger, genau 2 Datensätze ändern zu müssen oder u.U. ein paar Millionen?
und dazu dann gegenrechnen wie viel Arbeitszeit vergeudet wird um komplexere
SQL-Abfragen zu entwickeln und zu pflegen? Achtung
nicht übersehen!
Grundsätzlich sehe ich das wie SirRufo: In der
DB landet ein "Enum" das in der Anwendung dann ausgewertet wird. Werden Fremddatenschnittstellen angeboten, dann kommt ein CheckConstraint auf die Spalte, wenn primär über die eigene Anwendung Daten rein kommen, kann man die Prüfung getrost auch dem ORM überlassen.
Aber: Ein allgemeines richtig oder falsch wird es auf die Frage nie geben....