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.)