Wenn Sie nur eine Handvoll Rollen haben, sparen Sie nicht einmal Speicherplatz Speicherplatz in PostgreSQL . Eine integer
Spalte verwendet 4 Bytes, ein bigint
8 Byte. Beide erfordern möglicherweise ein Ausrichtungspolster:
- Die Postgres-Zeilengrößen verstehen
- Berechnen und Platz sparen in PostgreSQL
Ein boolean
Spalte verwendet 1 Byte. Effektiv können Sie vier oder mehr boolesche Spalten für eine integer
anpassen Spalte, acht oder mehr für einen bigint
.
Berücksichtigen Sie auch diesen NULL
Werte verwenden nur ein Bit (vereinfacht) in der NULL-Bitmap.
Einzelne Spalten sind einfacher zu lesen und indizieren . Andere haben das bereits kommentiert.
Sie könnten weiterhin Indizes für Ausdrücke oder Teilindizes verwenden, um Probleme mit Indizes zu umgehen ("non-sargable"). Verallgemeinerte Aussagen wie:
Die Datenbank kann bei einer Abfrage wie dieser keine Indizes verwenden
oder
Diese Bedingungen sind nicht SARG-fähig!
sind nicht ganz richtig - vielleicht für einige andere RDBMS, denen diese Funktionen fehlen.
Aber warum umgehen, wenn Sie das Problem ganz vermeiden können?
Wie Sie klargestellt haben, sprechen wir über 6 verschiedene Typen (vielleicht mehr). Gehen Sie mit individuellem boolean
Säulen. Sie sparen wahrscheinlich sogar Platz im Vergleich zu einem bigint
. Der Platzbedarf scheint in diesem Fall unerheblich.
Wenn diese Flags schlossen sich gegenseitig aus , könnten Sie eine verwenden Spalte vom Typ enum
oder eine kleine Nachschlagetabelle und ein darauf verweisender Fremdschlüssel. (Bei fraglicher Aktualisierung ausgeschlossen.)