Ако имате само няколко роли, дори не запазвате никакво хранилище пространство в PostgreSQL . integer
колоната използва 4 байта, bigint
8 байта. И двете може да изискват подравняване:
- Разбиране на размерите на редовете в Postgres
- Изчисляване и спестяване на място в PostgreSQL
boolean
колоната използва 1 байт. Ефективно можете да поставите четири или повече булеви колони за едно integer
колона, осем или повече за bigint
.
Също така имайте предвид, че NULL
стойностите използват само един бит (опростен) в растерната карта NULL.
Отделните колони са по-лесни за четене и индексиране . Други вече коментираха това.
Все още можете да използвате индекси на изрази или частични индекси, за да заобиколите проблеми с индексите („не-sargable“). Обобщени твърдения като:
базата данни не може да използва индекси за заявка като тази
или
Тези условия не подлежат на SARG!
не са напълно верни - може би за някои други RDBMS без тези функции.
Но защо да заобикаляте, когато можете да избегнете проблема напълно?
Както уточнихте, говорим за 6 различни вида (може и повече). Отидете с индивидуален boolean
колони. Вероятно дори ще спестите място в сравнение с един bigint
. Изискването за пространство изглежда незначително в този случай.
Ако тези знамена са взаимно изключващи се , можете да използвате един колона от тип enum
или малка справочна таблица и външен ключ, препращащ към нея. (Изключено във въпросната актуализация.)