Jeśli masz tylko kilka ról, nie zapisujesz nawet żadnego pamięci spacja w PostgreSQL . integer
kolumna używa 4 bajtów, a bigint
8 bajtów. Oba mogą wymagać dopełnienia wyrównania:
- Rozumienie rozmiarów wierszy Postgres
- Obliczanie i oszczędzanie miejsca w PostgreSQL
boolean
kolumna wykorzystuje 1 bajt. W efekcie możesz zmieścić cztery lub więcej kolumn logicznych dla jednej integer
kolumna, osiem lub więcej dla bigint
.
Weź również pod uwagę, że NULL
wartości używają tylko jednego bitu (uproszczonego) w bitmapie NULL.
Poszczególne kolumny są łatwiejsze do odczytania i indeksowania . Inni już to skomentowali.
Nadal możesz używać indeksów wyrażeń lub indeksów częściowych, aby obejść problemy z indeksami („niepodlegające sargowaniu”). Uogólnione stwierdzenia, takie jak:
baza danych nie może używać indeksów w zapytaniu takim jak to
lub
Te warunki nie podlegają SARG!
są nie do końca prawdziwe - może w przypadku niektórych innych RDBMS, w których brakuje tych funkcji.
Ale po co omijać, skoro można całkowicie uniknąć problemu?
Jak wyjaśniłeś, mówimy o 6 różnych typach (może więcej). Idź z indywidualnym boolean
kolumny. Prawdopodobnie zaoszczędzisz nawet miejsce w porównaniu z jednym bigint
. W tym przypadku zapotrzebowanie na miejsce wydaje się nieistotne.
Jeśli te flagi wykluczały się wzajemnie , możesz użyć jednego kolumna typu enum
lub małą tabelę przeglądową i klucz obcy do niej odwołujący się. (Wykluczono w aktualizacji pytania.)