Каков наилучший способ помещения данных формы в базу данных при неизвестном количестве данных? - PullRequest
5 голосов
/ 05 августа 2010

У меня довольно большая форма, которая состоит из переключателей / флажков, а также ввода текста. Из-за природы флажков, если они публикуют форму, не проверяя ее, она не отправляется в данных POST. Что оставляет меня немного зацикленным на том, как с этим справиться.

Я изначально начал свою базу данных со стандартным «столбцом для каждого поля». Например:

id | userid | firstname | lastname | middlename | phonenumber | mobilenumber |

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

id | userid | name      | value
---+--------+-----------+------
 1 |    1   | firstname | steve
---+--------+-----------+------
 2 |    1   | lastname  | blah

Это похоже на более хороший подход.

Итак, мой вопрос: как мне обращаться с базой данных, когда я не совсем уверен, что в ней происходит? Если у меня есть 20 флажков (каждый со своим именем), я должен вручную проверить, был ли каждый из них отправлен, и установить значение 'null', если нет?

Должен ли я очистить все строки таблицы для идентификатора пользователя и заменить его всеми новыми данными?

Какой эффективный способ сделать это?

Ответы [ 3 ]

1 голос
/ 05 августа 2010

EAV является анти-паттерном в этом случае. В результате вы получите очень запутанную логику, чтобы просто получить один набор данных.

Ваш первый подход более понятен и понятен другим.

Когда дело доходит до логического значения, такого как значение флажка, я бы использовал битовое / логическое поле в базе данных, где флажок был бы истинным, а тот факт, что вы не получили его, стать ложным.

То же самое относится и к схеме EAV - сохраните их все в БД, просто пометьте значение как true или false, в зависимости от того, что было опубликовано.

0 голосов
/ 05 августа 2010

Возможно, немного не по теме, но чтобы обойти функциональность флажка, добавьте скрытый ввод с тем же именем перед флажком и значением - ноль (или значение, которое означает «не установлено»):

<input type="hidden" name="blah" value="0">
<input type="checkbox" name="blah" value="1">

таким образом, если флажок не установлен, вы все равно получите значение 0 в своем сообщении - но если оно будет отмечено, вы получите 1, потому что последнее поле того жеимя POST 'изд.

0 голосов
/ 05 августа 2010

Сначала вы должны проанализировать ваши данные и определить правильные значения для каждого элемента. Затем вы берете данные и помещаете в базу данных.

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

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

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