В то время как подход с маскированием битов имеет некоторые применения, помимо впечатления от друзей ((может снизить требования к хранилищу), я настоятельно рекомендую не использовать его для данных, к которым необходимо обращаться Причина в том, что вы не можете индексировать это эффективно. Большинство, если не все запросы должны быть решены с использованием полного сканирования. Я был действительно сожжен этим очень давно, потому что я тестировал его на слишком маленьком наборе данных, оставаясь один в базе данных. Добавьте несколько сотен тысяч строк, дюжину пользователей, и это просто не увеличится.
Поэтому, если у вас нет особых требований, я советую вам помещать каждый фрагмент данных в отдельный столбец (бит или целое число) вместе с соответствующими индексами (отдельные или составные столбцы) в зависимости от потребностей вашего запроса.
Недостатком (на мой взгляд, правильного) подхода является увеличение памяти (из-за отдельных индексов), но если у вас нет миллионов строк, это вряд ли заметно.
Если по каким-то причинам это не работает для вас, есть других опций, которые используют шаблоны в данных для создания эффективной структуры поиска. Но все они имеют свою цену (жестко ограниченная гибкость, проблемы с блокировками в многопользовательских средах и т. Д.).
Мой совет: храните каждый фрагмент данных в отдельном столбце. Вот как база данных была предназначена для использования, и она будет использовать все преимущества базы данных. Это также оказывается наилучшим подходом во всех случаях, кроме самых необычных.