Много логических значений на двух таблицах - PullRequest
2 голосов
/ 03 октября 2011

Использование Rails 2.1 и Mysql.

У меня есть corporation model, который has_many companies

И, конечно, company model, который belongs_to corporation

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

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

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

  • Используйте что-то вроде has_many_booleans gem , что означает, что я добавляю один столбец(логическое) для каждой таблицы и обрабатывать данные в моем коде.Кажется, что это было бы наименее очевидным решением, но мне кажется, что оно более изящно, особенно когда приходит время добавить больше логических значений в эти таблицы.

Что является лучшим способом обработкилогические значения, которые появятся в нескольких таблицах?

1 Ответ

0 голосов
/ 03 октября 2011

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

Пример : В реальном мире корпорация является типом компании и разделяет многие атрибуты Company;эти атрибуты могут храниться в таблице Company, возможно, с флагом is_a_corporation.

Если корпорации имеют уникальные атрибуты, такие как способность владеть компаниями, эти функции и атрибуты должны быть в Corporation model.

Booleans as Bits: Я не думаю, что есть что-то плохое в том, чтобы иметь много логических атрибутов в модели, но я согласен, что все эти логические столбцы кажутся неуместнымив таблице.Я проверил гем has_many_booleans, который предлагает некоторые интересные возможности для симуляции побитовых операций и масок, которые, исходя из мира встроенного программного обеспечения, имеют для меня большой смысл.

Проверяя, я обнаружил, что Postgresql (мой выбор базы данных) предлагает тип данных bitstring и предоставляет множество фактических побитовых операций надстолько битов, сколько вы хотите, используя только один столбец для всех ваших логических значений, что мне кажется невероятно крутым.Недостатком является то, что вам придется настраивать столбец и выполнять операции в нативном SQL.

...