Mysql 纸质表格到数据库

Mysql 纸质表格到数据库,mysql,ruby-on-rails,Mysql,Ruby On Rails,我正在做一个Rails 3应用程序,它取代了一家公司的纸质表单。纸质表单跨越两页,包含许多字段、复选框、下拉列表等 我想知道如何在DB中建模,一种方法就是在DB中为表单上的每个字段创建一个字段。这将使ad或删除文件变得有些困难,因为需要进行迁移。另一种方法是执行某种类型的键/值存储no-MongoDB/CouchDB不是选项-需要MySQL。执行键/值将非常灵活,但查询起来会很痛苦。它会直接对ActiveRecord起作用吗 有人能想出一个很好的解决办法吗 问候, 雅各布如果你的表单是相当静态的

我正在做一个Rails 3应用程序,它取代了一家公司的纸质表单。纸质表单跨越两页,包含许多字段、复选框、下拉列表等

我想知道如何在DB中建模,一种方法就是在DB中为表单上的每个字段创建一个字段。这将使ad或删除文件变得有些困难,因为需要进行迁移。另一种方法是执行某种类型的键/值存储no-MongoDB/CouchDB不是选项-需要MySQL。执行键/值将非常灵活,但查询起来会很痛苦。它会直接对ActiveRecord起作用吗

有人能想出一个很好的解决办法吗

问候,


雅各布

如果你的表单是相当静态的,那么继续为它制作一个模型,这是一个合理的方法,即使它看起来相当初级。这并不是你的错,表单太复杂了,你只是想出了一个考虑到这一点的解决方案。对此进行调整的迁移非常容易实现,也很容易理解


将其拆分为键/值版本会更好,但需要更多的工程。如果您期望此表单将受到频繁和彻底的修改,那么在这方面为未来构建可能更有意义。您可以看到这样一个示例:您可能希望在类似的位置构建表单生成器,但构建表单生成器当然不能掉以轻心。

我建议您将最常见的属性建模为单独的数据库字段。一旦设置了尽可能多的字段,就可以回过头来为伪随机属性使用键值设置。我推荐一种通过ActiveRecord方法serialize存储散列的简单方法。例如:

class TPS < ActiveRecord::Base
  serialize :custom, Hash
end

@tps = TPS.create(:name => "Kevin", :ssn => "123-456-789", :custom => { :abc => 'ABC', :def => )'DEF' })
@tps.name # Kevin
@tps.ssn  # 123-456-789
@tps.custom[:abc] # ABC
@tps.custom[:def] # DEF

您打算如何存储多个选择-即:多个选择列表,给定问题的多个复选框?这些属性最好存储为键/值,如果您有一个合适的界面,查询它们也不会太糟糕。另外,当您有复选框时,要小心您的规范化…如果您有多值属性,您甚至不在1NF中。任何一种方法都有其成本。您必须决定是否要在复杂查询键/值或字段的数据重构字段中支付费用,标准化。@OMG Ponies:我认为,作为模型中的常量组合,数据库中的文本以及带有外键的表中的常量组合,取决于选项需要由客户机管理的可能性有多大。你有更好的建议吗?@rownage:嗯?你能详细解释一下1NF部分吗?TPS报告…呵呵…永远不会得到old@Dave:显然,这是一份实际的报告测试程序规范。不过,我以前从未听说过它。哇,这似乎是一个非常好的方法。如何查询自定义属性?我知道你的意思-多年前我实际上在ASP中完成了一个简单的表单生成器。但是,客户没有足够的预算来做那么多的工作。但是,如果表单发生了很大变化,它可能不会出现在初始版本中。