Коллега добавляет немного маски ко всем нашим таблицам базы данных. В теории это так, мы можем отследить определенные свойства каждой строки через всю систему. Например...
Действительно ли это - хорошая идея? Есть ли другое использование, где этот подход был бы выгоден?
Мое предпочтение является этими свойствами, очевидно важны, и наличие специального столбца для каждого свойства выравнивается по ширине для создания то, что происходит более ясное поддерживающим разработчикам.
Не совсем, нет.
Вы можете хранить в нем только биты, и только определенное количество. Так что мне кажется, что это требует много головной боли на уровне приложений позже, отслеживая, что каждая из них означает, и потенциальные злоупотребления позже, потому что «эй, они повсюду». Будет ли каждая битовая маска в каждой таблице использовать одно и то же определение для каждого бита? Будет ли он отличаться на каждом столе? Что происходит, когда у вас заканчиваются биты? Добавить еще?
Есть много потенциальных вещей, которые вы могли бы сделать с ним, но возникает вопрос: «Почему это так, вместо того, чтобы определять, для чего мы будем использовать эти биты для прямо сейчас и просто сделать из них правильные столбцы? " В любом случае, вы на самом деле не обойдете возможность изменения схемы таким образом, поэтому кажется, что он пытается решить проблему, которую вы действительно не можете «решить», и особенно с помощью битовых масок.
Каждая из упомянутых вами вещей может (и должна быть) решена с помощью реальных столбцов в базе данных, и это гораздо более самодокументируется, чем «бит 5 поля BitMaskOptions
».
Нет, это даже отдаленно не хорошая идея IMO. Каждый столбец должен представлять одно понятие и значение. Битовые маски имеют все виды проблем с производительностью и обслуживанием. Как новым разработчикам понять, что означает каждый из битов? Как предотвратить случайное смешивание значения порядка битов?
Лучше иметь отношения "многие-ко-многим" или отдельные столбцы, а не битовую маску. Вы сможете индексировать по ней, включить ссылочную целостность (в зависимости от подхода), легко добавлять новые элементы и изменять порядок результатов для соответствия различным отчетам и т. д.
Выделенный столбец - лучше, потому что он, несомненно, более очевиден и менее подвержен ошибкам. SQL Server уже эффективно хранит BIT
столбцов , поэтому производительность не является проблемой.
Единственный аргумент, который я мог видеть для битовой маски, - это отсутствие необходимости изменять схему БД каждый раз, когда вы добавляете новый флаг, но на самом деле, если вы добавляете новые флаги, это часто значит, что что-то не так.