我有一个非常大的表单,其中包含单选按钮/复选框以及文本输入。由于复选框的性质,如果他们在不检查的情况下发布表单,则不会在 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/