Полезно ли добавлять битовую маску ко всем таблицам в базе данных? - PullRequest
8 голосов
/ 12 мая 2010

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

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

Это хорошая идея? Существуют ли другие применения, где этот подход был бы полезен?

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

Ответы [ 3 ]

10 голосов
/ 12 мая 2010

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

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

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

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

7 голосов
/ 12 мая 2010

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

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

4 голосов
/ 12 мая 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...