Das Geschlecht ist aus konservativer Sicht eine binärinformation: Mann/ kein Mann
bzw. aus feministisch-konservativer Sicht: Frau/keine Frau.
Für ewiggestrige Katholikenmuslime (oder wahlweise auch osteuropäische Enggestirne) würde es also reichen, das Geschlecht als Bit/Boolean abzulegen. Das ist die zweitkompakteste* Art, diese Information zu verpacken. Das hat natürlich den entscheidenden Nachteil, das eine Erweiterung des eigenen Horizontes nur mit erheblichem Aufwand bei der Änderung
DB-Struktur möglich ist.
Da es sich hier -allgemein gesehen- um ein qualitatives** Merkmal handelt (ich bin 'A', 'B', 'C' oder 'D') würde ich auch zu einer einfachen Kodierung raten, dessen Präsentation (also Text) in einer separaten Tabelle untergebracht ist. Diese Kodierung ist ja unabhängig von der Information an sich und macht den Code nur lesbar. Hier würde ich allerdings davon abraten, in dieser 'Geschlechtertabelle' gleich noch Anrede etc. unterzubringen: Das gehört dort nicht hin: Anreden haben ja nur indirekt etwas mit dem Geschlecht zu tun, sondern eher mit dem Status der Person.
Ob man hier Bytes oder Integer verwendet, ist eigentlich wurscht, weil die paar Bytes Speicherplatz den Kohl auch nicht fett machen. Besser wäre eine gleichförmige Behandlung aller qualitativer Merkmale über alle Tabellen.
und eine Kodierung wie 'M' oder 'F' ist nun totaler Quark, weil dadurch die Tabelle nicht mir in 3NF ist.
(*) die kompakteste Art wären zwei Tabellen, für jedes Geschlecht eine eigene Tabelle.
(**) im Gegensatz zu quantitativen Merkmalen, wie Alter, Adresse etc.