【问题标题】:Data model for a extensible web form可扩展 Web 表单的数据模型
【发布时间】:2010-09-07 03:06:06
【问题描述】:

假设我有一个包含三个 10 字段的表单:field1..field10。我将表单数据存储在一个或多个数据库表中,可能使用 10 个数据库列。

现在假设几个月后我想再添加 3 个字段。将来我可能会根据不断变化的要求在此表单中添加/删除字段。如果每个表单字段都有一个数据库列,那么每次更改表单时都必须对数据库进行相应的更改。这似乎是一个令人头疼的维护问题。一定有更复杂的方法。

所以我的问题是,如何设计一个与我的 UI 松散耦合的数据模型?一个具体的用例是用户可扩展/可定制的 CRM 系统。

【问题讨论】:

    标签: database-design forms


    【解决方案1】:

    您可以将字段抽象到单独的表中,以便它们与 Form 表是多对多的:

    表格

    ID
    名称
    等等

    字段

    ID
    标签
    价值

    表单域

    FormID
    FieldID

    【讨论】:

      【解决方案2】:

      除非您有充分的理由这样做,否则这通常是个坏主意。这使得优化和扩展数据库变得非常困难。

      如果您绝对必须这样做,那么 Travis 的建议对于小型表来说是可以的,但它并不能真正很好地扩展。

      【讨论】:

        【解决方案3】:

        当我在 AIMS (www.totalaims.com) 上为 Quest Computing 工作时,我的团队为此提出了一个解决方案。总之,我们添加了维护屏幕,允许管理员添加元数据,并因此在某些表中向数据库添加字段。这些字段也被自动添加到它们自己的维护和搜索屏幕中。我们在 OpenACS 之上构建了它。您可以在 www.openacs.org 找到更多信息 - 搜索“flexbase”或“dynfields”或查看此处 www.project-open.org/doc/intranet-dynfield/。这工作得很好——它们的主要缺点是主要优点的副作用,即非 DBA 可以添加字段,因此很容易影响性能。

        【讨论】:

          【解决方案4】:

          我过去曾使用数据库中的 XML 列来存储额外字段。我通常在 XML 列中有一个大的属性包,然后在进行更新或插入时使用 XSD 来强制验证。当我检索数据时,我在 XSL 或对象模型中有规则来确定是否显示元素、应用哪些附加格式以及基于属性节点中的数据类型为 Web 表单使用哪种类型的输入元素。

          如果需要将一些数据以关系方式存储,而将其他数据以可扩展方式存储,以避免出现大量空行的宽表效应,那么它的效果非常好。

          如果您不需要对数据进行关系处理,例如与数据库中的其他表连接或旋转,那么简单的自包含 XML 表单也是一个很好的解决方案。

          现在大多数数据库都对此类事物提供一流的 XML 支持。例如,在 SQL Server 中,您可以将 XSD 架构应用于数据库中 XML 数据类型的列。在最近的版本中,还支持对这些列进行索引。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-04-02
            • 1970-01-01
            • 2011-02-14
            • 1970-01-01
            • 2011-02-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多