当存在未知的数据量时,将表单数据放入数据库的最佳方法是什么?

dav*_*ave 5 html database forms

我有一个非常大的表单,包括单选按钮/复选框以及文本输入.由于复选框的性质,如果他们发布表单而不检查它,它不会在POST数据中发送.这使我对如何处理它有点困惑.

我最初使用标准的"每个字段列"启动了我的数据库.例如:

id | userid | firstname | lastname | middlename | phonenumber | mobilenumber |
Run Code Online (Sandbox Code Playgroud)

当我最终拥有超过30列时,这很快就改变了.这种形式是巨大的.我已经决定使用'EAV架构'给我的表只有4行.它现在看起来像这样:

id | userid | name      | value
---+--------+-----------+------
 1 |    1   | firstname | steve
---+--------+-----------+------
 2 |    1   | lastname  | blah
Run Code Online (Sandbox Code Playgroud)

这似乎是一种更好的方法.

所以我的问题是,当我不完全确定它的内容时,我应该如何处理数据库呢?如果我有20个复选框(每个都有自己的名字),我应该手动检查每个复选框是否已提交,如果没有,则设置'null'值?

我是否应该从表中清空用户ID的所有行并将其替换为所有新数据?

这样做的有效方法是什么?

Ode*_*ded 1

在这种情况下,EAV 是一种反模式。为了检索一组数据,您最终会得到非常复杂的逻辑。

您的第一种方法对其他人来说更易于维护和理解。

当涉及到布尔值(例如复选框值)时,我会在数据库中使用位/布尔字段,其中复选标记将是 true,而您没有将其发回的事实将变为 false 。

同样的事情代表 EAV 模式 - 将它们全部保存在数据库中,只需将值标记为 true 或 false,具体取决于发布的内容。