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

标签 html database forms

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

我最初使用标准的“每个字段的列”来启动我的数据库。例如:

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

当我最终拥有超过 30 列时,情况很快发生了变化。这个表格很大。我决定我将使用“EAV 模式”让我的表只有 4 行。现在看起来像这样:

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

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

所以我的问题是,当我不完全确定数据库中发生了什么时,我应该如何处理数据库?如果我有 20 个复选框(每个都有自己的名称),我是否应该手动检查每个复选框是否已提交,如果没有则设置一个“空”值?

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

执行此操作的有效方法是什么?

最佳答案

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

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

当涉及到 bool 值时,例如复选框值,我会在数据库中使用一个位/ bool 字段,其中复选标记为真,而您没有得到它回传的事实会变成假的。

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

关于html - 当数据量未知时,将表单数据放入数据库的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3412546/

相关文章:

具有必需和禁用元素的 Html5 表单验证

javascript - getElementsByClassName 更改输入值

python - 从html中提取信息

html - CSS 淡出 HR 行问题

javascript - 使用 javascript 函数打印出动态 html 表(jquery 数据表插件)

database - 数据字典还是ORM?

forms - 如何在 Laravel 5 中测试表单请求规则?

jQuery 打开以固定大小为中心的新窗口

html - 单个元素的div容器是什么意思?

MySQL查询转MDB查询