Добавляет немного маски ко всем таблицам в полезной базе данных?

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

  • Строка, поставленная с системой, или добавила клиентом, после того как они начали использовать систему
  • Ссорится удаленный из таблицы (мягкий, удаляет),
  • Строка значение по умолчанию в ряде строк

Действительно ли это - хорошая идея? Есть ли другое использование, где этот подход был бы выгоден?

Мое предпочтение является этими свойствами, очевидно важны, и наличие специального столбца для каждого свойства выравнивается по ширине для создания то, что происходит более ясное поддерживающим разработчикам.

8
задан Tom 12 May 2010 в 03:40
поделиться

3 ответа

Не совсем, нет.

Вы можете хранить в нем только биты, и только определенное количество. Так что мне кажется, что это требует много головной боли на уровне приложений позже, отслеживая, что каждая из них означает, и потенциальные злоупотребления позже, потому что «эй, они повсюду». Будет ли каждая битовая маска в каждой таблице использовать одно и то же определение для каждого бита? Будет ли он отличаться на каждом столе? Что происходит, когда у вас заканчиваются биты? Добавить еще?

Есть много потенциальных вещей, которые вы могли бы сделать с ним, но возникает вопрос: «Почему это так, вместо того, чтобы определять, для чего мы будем использовать эти биты для прямо сейчас и просто сделать из них правильные столбцы? " В любом случае, вы на самом деле не обойдете возможность изменения схемы таким образом, поэтому кажется, что он пытается решить проблему, которую вы действительно не можете «решить», и особенно с помощью битовых масок.

Каждая из упомянутых вами вещей может (и должна быть) решена с помощью реальных столбцов в базе данных, и это гораздо более самодокументируется, чем «бит 5 поля BitMaskOptions ».

10
ответ дан 5 December 2019 в 07:57
поделиться

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

Лучше иметь отношения "многие-ко-многим" или отдельные столбцы, а не битовую маску. Вы сможете индексировать по ней, включить ссылочную целостность (в зависимости от подхода), легко добавлять новые элементы и изменять порядок результатов для соответствия различным отчетам и т. д.

4
ответ дан 5 December 2019 в 07:57
поделиться

Выделенный столбец - лучше, потому что он, несомненно, более очевиден и менее подвержен ошибкам. SQL Server уже эффективно хранит BIT столбцов , поэтому производительность не является проблемой.

Единственный аргумент, который я мог видеть для битовой маски, - это отсутствие необходимости изменять схему БД каждый раз, когда вы добавляете новый флаг, но на самом деле, если вы добавляете новые флаги, это часто значит, что что-то не так.

7
ответ дан 5 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: