Мне лично нравится иметь отдельные столбцы.единственное место, которое я мог бы рассмотреть для маскировки, - это когда база данных и приложение работают в экстремальных условиях или на устройствах с малой памятью и запоминающих устройствах, где любое использование памяти или пространства имеет решающее значение.
1 - пробел не должен учитываться, если только класс / таблица не увеличится до огромных объемов.для имитации логических флагов достаточно маленького int (1), и все, что вам нужно, это значения 0/1.
2 - становится намного сложнее для тех, кто хочет выполнять запросы к таблице или писать отчеты, используя ее,и если ваш клиент имеет доступ к базе данных, я вполне уверен, что маскирование не будет приемлемым в большинстве случаев.
3 - будет гораздо сложнее построить индексы для этого столбца, когда они понадобятся, если это будетвообще возможно (на основе базы данных)
4 - работать больше и писать больше кода не должно быть проблемой.Вы работаете больше сейчас, но вы будете работать меньше в будущем.думать, что это меньше работы для программиста / DBA это просто иллюзия ИМХО.Вот некоторые соображения:
a - будет сложнее поддерживать код и писать запросы к базе данных.может быть, вы все делаете сейчас в своем Java-коде, но никогда не знаете, что нас ждет в будущем.
b - сделать структурные изменения сложнее.Что делать, если клиент требует удаления двух флагов и добавления 4?Вы сохраняете оригинальные два бита, которые содержали удаленные флаги в базе данных, и добавляете 4 бита?или вы используете их для двух новых флагов, а затем добавляете еще два бита?Как это повлияет на код, который уже написан?и насколько легко было бы отслеживать все места и вносить изменения в код?
в небольшом приложении это не большая проблема.но приложения растут со временем.если стол получит широкое распространение, это очень опасно.если у вас был код, работающий с 7-м и 8-м флагами, и они были удалены, и было решено (скажем, другим программистом) повторно использовать те же места, любой код, который использовался для доступа к 7-му и 8-му битам, будет продолжать работать (неправильно)) пока что не заметил.он может уже делать вредные вещи, пока проблема не будет обнаружена и устранена.если у вас были отдельные столбцы, и вы их отбросили, ошибка появится на поверхности при самом первом использовании этого кода, поскольку столбцов там не будет.
c- это, без сомнения, будет сложнеесоздавать сценарии, которые обновляют данные и / или изменяют структуру для базы данных.Опытный DBA не будет сидеть и писать имена столбцов один за другим и будет использовать свои инструменты для генерации сценариев.с помощью битовых манипуляций ему придется работать вручную и не ошибаться в выражениях, которые он производит в различных операциях выбора / обновления
5 - все вышеперечисленное связано с базой данных.как только оно достигнет вашего приложения, вы свободны.вы можете прочитать 16 флагов из базы данных и получить целое число, и с этого момента ваш код может использовать битовые манипуляции с ним, и вы можете сэкономить время (написав свои функции, которые имеют дело с ним один раз, и используя их).Я лично считаю, что и здесь лучше не делать этого, но в любом случае это ваш выбор.
Я знаю, что я не сосредоточен, и что я мог бы повторить здесь и там.Но я также надеюсь, что смог помочь вам увидеть долгосрочные соображения, которые помогут вам сделать правильный выбор для вашего случая.