2

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

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

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

4

4 回答 4

2

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

形式

身份证
姓名

场地

ID
标签

表单域

表单ID
字段ID

于 2008-08-28T14:44:26.230 回答
1

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

如果您绝对必须这样做,那么 Travis 的建议对于小桌子来说很好,但它并不能很好地扩展。

于 2008-09-02T12:09:06.970 回答
0

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

于 2008-12-31T14:32:39.973 回答
0

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

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

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

Most databases now have first class XML support for this sort of thing. In SQL Server for example you can apply an XSD schema to a column of an XML datatype right in the datbase. In recent versions there is also support for indexing on those columns.

于 2010-01-21T13:15:26.630 回答