Есть ли недостатки битовых флагов в столбцах базы данных?

Рассмотрим следующие таблицы:

CREATE TABLE user_roles(
    pkey         SERIAL PRIMARY KEY,
    bit_id       BIGINT NOT NULL,
    name         VARCHAR(256) NOT NULL,
);

INSERT INTO user_roles (bit_id,name) VALUES (1,'public');
INSERT INTO user_roles (bit_id,name) VALUES (2,'restricted');
INSERT INTO user_roles (bit_id,name) VALUES (4,'confidential');
INSERT INTO user_roles (bit_id,name) VALUES (8,'secret');

CREATE TABLE news(
    pkey          SERIAL PRIMARY KEY,
    title         VARCHAR(256),
    company_fk    INTEGER REFERENCES compaines(pkey), -- updated since asking the question
    body          VARCHAR(512),
    read_roles    BIGINT -- bit flag 
);

read_roles - это битовые флаги, которые определяют некоторую комбинацию ролей, которые могут читать новости. Поэтому, если я вставляю новость, которая может быть прочитана ограниченным и конфиденциальным образом, я бы установил для read_roles значение2 | 4 или 6, и когда я хочу получать сообщения новостей, которые может видеть конкретный пользователь, я могу использовать такой запрос, как.

select * from news WHERE company_fk=2 AND (read_roles | 2 != 0) OR  (read_roles | 4 != 0) ; 
select * from news WHERE company_fk=2 AND read_roles = 6; 

Каковы недостатки использования битовых флагов в столбцах базы данных в целом? Я предполагаю, что ответ на этот вопрос может зависеть от конкретной базы данных, поэтому мне интересно узнать о недостатках конкретных баз данных.

Я использую Postgres 9.1 для моего приложения.

ОБНОВИТЬ Я понял, что база данных не в том, чтобы использовать индекс для битовых операций, которые потребуют полного сканирования таблиц, что приведет к потере производительности. Поэтому я обновил вопрос, чтобы более точно отразить мою ситуацию: каждая строка в базе данных принадлежит определенной компании, поэтому у всех запросов будет предложение WHERE, включающее company_fk, в котором будет индекс.

ОБНОВИТЬ Сейчас у меня только 6 ролей, возможно, еще больше в будущем.

ОБНОВИТЬ роли не являются взаимоисключающими, и они наследуют друг от друга, например, ограниченные наследуют все разрешения, назначенные для public.

Ответы на вопрос(4)

Ваш ответ на вопрос