Ответ может зависеть больше от вашей общей концепции, чем от чего-либо еще.Для каждого истинного / ложного бита данных спросите себя, насколько тесно это связано с сущностью модели.Как часто на каждый бит будут ссылаться в экземплярах модели или использовать при поиске.Те, которые тесно связаны, могут принадлежать модели;те, которые меньше, могут быть лучше сгруппированы в другие таблицы.
Пример : В реальном мире корпорация является типом компании и разделяет многие атрибуты Company
;эти атрибуты могут храниться в таблице Company
, возможно, с флагом is_a_corporation
.
Если корпорации имеют уникальные атрибуты, такие как способность владеть компаниями, эти функции и атрибуты должны быть в Corporation
model.
Booleans as Bits: Я не думаю, что есть что-то плохое в том, чтобы иметь много логических атрибутов в модели, но я согласен, что все эти логические столбцы кажутся неуместнымив таблице.Я проверил гем has_many_booleans
, который предлагает некоторые интересные возможности для симуляции побитовых операций и масок, которые, исходя из мира встроенного программного обеспечения, имеют для меня большой смысл.
Проверяя, я обнаружил, что Postgresql (мой выбор базы данных) предлагает тип данных bitstring и предоставляет множество фактических побитовых операций надстолько битов, сколько вы хотите, используя только один столбец для всех ваших логических значений, что мне кажется невероятно крутым.Недостатком является то, что вам придется настраивать столбец и выполнять операции в нативном SQL.