0

我有问题,我正在创建非常复杂的表单。表单的某些部分是动态创建的。可以说,如果您从下拉列表中选择某个选项,则会将额外的字段注入到表单中。

哪种方法最适合存储该数据?我想尝试在不使用多张桌子的情况下离开。因为我使整个应用程序变得如此复杂。

我正在考虑在我的模型中将所有可能的值初始化为“0”。然后用发布数据覆盖它们,并将整个数组存储在表中。有人看到这种方法有什么问题吗?

4

2 回答 2

2

在模型中使用多个表的必要性并不取决于您必须存储多少数据(多少字段) - 它取决于模型的逻辑。因此,如果有合乎逻辑的理由在您的模型中使用关系(fe 1:n,n:m),那就去做吧!!!

如果您在创建模型时不遵循基本规则并尝试将所有数据存储在一张表中,虽然它应该分成许多表,但您很快就会后悔。将来对代码的任何更改都会花费您更多的工作,并且在某些时候您将无法理解自己的代码,并且必须再次编写它,这次要遵守规则;)

如果开发正确的模型会花费大量工作,请不要担心(最近我在开发模型上投入了两周多的时间)——这真的很有意义,因为之后你可以通过一个精心开发和计划的模型更快、更有效地工作模型。

另一方面,在某些情况下,在一个表中存储超过 100 个或更多字段是有意义的 - 这取决于逻辑。因此,如果您提供一些示例,也许可以说您是否应该使用一张或多张桌子。

于 2012-04-07T14:31:58.457 回答
0

很大程度上取决于您以后要如何处理表单数据以及频率。

序列化单场

在最简单的用例中,您可以 base64_encode(serialize($data)) 所有数据并将其放入数据库中的单个列中。

  • 简单的
  • 快速插入
  • 易于添加/更改输入字段
  • 搜索值困难且缓慢(尤其是在规模上)
  • 如果您需要对数据进行系统更改,则难以以编程方式更新
  • 如果您总是从数据库中提取所有数据并且从不通过序列化字符串中的数据来缩小您的 sql 查询范围,那就完美了。

元数据表

添加第二个元数据表可以提供更多的灵活性。第二个表将具有对主表单提交的外键引用、元数据名称和值。这允许您轻松存储、搜索和操作非常灵活的多对一关系。你可以在 wordpress 中看到这样的例子。

  • 2张桌子,但仍然很简单
  • 易于添加/更改输入字段
  • 通过 sql 进行更好的搜索
  • 更容易系统地更新
  • 如果您并不总是获得所有数据或必须通过表单数据缩小搜索范围,那就完美了

还有一个不同的方向 - 如果您发现自己处理大量此类数据,您也可以考虑查看基于文档的数据库,例如 MongoDB 或 CouchDB。

于 2012-04-07T14:19:52.007 回答