Каков наилучший способ вставить много входов флажка в базу данных? - PullRequest
1 голос
/ 10 июля 2010

Привет,

У меня есть форма, которая имеет почти 150 флажков, но они не находятся в одном месте, форма разделена на подразделения, и у каждого подразделения есть блоки, флажки ставятся в эти блоки в зависимости от их группы где вы можете найти четыре флажка в этом месте и восемь в другом и 30 в другом и так далее.
Поэтому я создал две таблицы для хранения групп, а другую для хранения флажков и к какой группе они принадлежат.

FormBlocks
    --------------------------
    |  ID  |       key       |
    --------------------------
    |   1  |  property_type  |
    |   2  |    providors    |
    --------------------------

BlocksCheckBoxes
    ------------------------------------------------
    |  ID  |     Label    |   Key  |  FormBlockId  |
    ------------------------------------------------
    |   1  |  Sweet Home  |  home  |       1       |
    |   2  |     Farm     |  farm  |       1       |
    |   3  |  Invst Bank  |  bank  |       2       |
    |   4  |  Constructor | constr |       2       |
    ------------------------------------------------

У меня есть два подхода для хранения их значений:
Первый хранит значения флажков в виде объединенной строки их ключей и вставляет их непосредственно в назначенную таблицу, например:

UserProperties
    ----------------------------------------
    |  ID  |  Customer  |  PropertiesType  | 
    ----------------------------------------
    |   1  |    Cat     |     home,farm    |
    ----------------------------------------

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

Второй способ создания таблиц для каждого блока, например:

UserProperties
    ---------------------
    |  ID  |  Customer  |
    ---------------------
    |   1  |    Cat     |
    ---------------------

UserPropertiesTypes
    --------------------------------------
    |  ID  |  CustomerId  |  CheckBoxId  | 
    --------------------------------------
    |   1  |       1      |       1      |
    --------------------------------------
    |   1  |       1      |       2      |
    --------------------------------------

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

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

Если у вас есть какие-либо предложения или лучший способ сделать это, пожалуйста, не стесняйтесь сообщить. Большое спасибо

1 Ответ

1 голос
/ 10 июля 2010

Судя по

BlocksCheckBoxes
------------------------------------------------
|  ID  |     Label    |   Key  |  FormBlockId  |
------------------------------------------------
|   1  |  Sweet Home  |  home  |       1       |
|   2  |     Farm     |  farm  |       1       |
|   3  |  Invst Bank  |  bank  |       2       |
|   4  |  Constructor | constr |       2       |
------------------------------------------------

Предполагается, что можно выбрать только одну опцию, поэтому этот блок флажков можно выразить как одно значение перечислителя (1 для «Sweet Home», 2 для «Farm» и т. Д.).

Тогда флажки множественного выбора можно сделать с помощью битовых масок (вам не нужно использовать встроенные базы данных, если значений слишком много).

Если вы выберете достаточно большое значение перечислителя / битовой маски (беззнаковое 32-битное целое число сделает 4 миллиона + перечислителей и 32 битовых маски). Каждое «деление» для каждого заполненного «бланка» может быть отдельной строкой, но с одинаковым столбцом значений для всех делений.

Surveys
------------------------------------------
|  ID  | User | Division |  Value        |
------------------------------------------
|   1  | 1    | 1        |       7       |
|   2  | 1    | 2        |    234234     |
|   3  | 2    | 1        |       7       |
|   4  | 2    | 2        |  23491032     |
------------------------------------------

Таким образом, в этом примере пользователь - для каждого запуска заполненной формы, Division - для каждого подразделения / группы / блока, и Value будет либо перечислителем для выбранного взаимоисключающего значения, либо битовой заменой для множественного выбора. *

С некоторой продуманной упаковкой ООП вы можете сделать эту работу в ваших интересах с хорошим интерфейсом API и единой таблицей из 4 столбцов, представляющей все ваши данные. Если вы предпочитаете, столбец идентификатора может быть удален, а вместо него может использоваться составной ключ пользователя и подразделения.

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