Om du bara har en handfull roller sparar du inte ens något lagringsutrymme utrymme i PostgreSQL . Ett integer
kolumnen använder 4 byte, en bigint
8 byte. Båda kan kräva justeringsutfyllnad:
- Förstå Postgres radstorlekar
- Beräkna och spara utrymme i PostgreSQL
En boolean
kolumnen använder 1 byte. I praktiken kan du passa fyra eller fler booleska kolumner för ett integer
kolumn, åtta eller fler för en bigint
.
Tänk också på att NULL
värden använder bara en bit (förenklat) i NULL-bitmappen.
Enskilda kolumner är lättare att läsa och indexera . Andra har redan kommenterat det.
Du kan fortfarande använda index på uttryck eller partiella index för att kringgå problem med index ("icke-sargable"). Generaliserade uttalanden som:
databasen kan inte använda index på en fråga som denna
eller
Dessa villkor är icke-SARG-bara!
är inte helt sanna - kanske för vissa andra RDBMS som saknar dessa funktioner.
Men varför kringgå när du kan undvika problemet helt och hållet?
Som du har förtydligat talar vi om 6 distinkta typer (kanske fler). Gå med individuell boolean
kolumner. Du kommer förmodligen till och med att spara utrymme jämfört med en bigint
. Utrymmesbehov verkar oväsentligt i det här fallet.
Om dessa flaggor var ömsesidigt uteslutande , kan du använda en kolumn av typen enum
eller en liten uppslagstabell och en främmande nyckel som refererar till den. (Uteslutet i fråga om uppdatering.)