Jika Anda hanya memiliki beberapa peran, Anda bahkan tidak menyimpan penyimpanan spasi di PostgreSQL . Sebuah integer kolom menggunakan 4 byte, sebuah bigint 8 byte. Keduanya mungkin memerlukan padding penyelarasan:
- Memahami ukuran baris Postgres
- Menghitung dan menghemat ruang di PostgreSQL
Sebuah boolean kolom menggunakan 1 byte. Secara efektif, Anda dapat memasukkan empat atau lebih kolom boolean untuk satu integer kolom, delapan atau lebih untuk bigint .
Perhatikan juga bahwa NULL nilai hanya menggunakan satu bit (disederhanakan) dalam bitmap NULL.
Kolom individual lebih mudah dibaca dan diindeks . Yang lain sudah mengomentari itu.
Anda masih dapat menggunakan indeks pada ekspresi atau indeks parsial untuk menghindari masalah dengan indeks ("non-sargable"). Pernyataan umum seperti:
database tidak dapat menggunakan indeks pada kueri seperti ini
atau
Kondisi ini tidak dapat di-SARG!
adalah tidak sepenuhnya benar - mungkin untuk beberapa orang lain RDBMS tidak memiliki fitur ini.
Tetapi mengapa menghindari jika Anda dapat menghindari masalah sama sekali?
Seperti yang telah Anda jelaskan, kita berbicara tentang 6 jenis yang berbeda (mungkin lebih). Gunakan boolean individu kolom. Anda bahkan mungkin akan menghemat ruang dibandingkan dengan satu bigint . Kebutuhan ruang tampaknya tidak penting dalam kasus ini.
Jika bendera ini saling eksklusif , Anda dapat menggunakan satu kolom tipe enum atau tabel pencarian kecil dan kunci asing yang mereferensikannya. (Dikesampingkan dalam pembaruan pertanyaan.)