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

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

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

有帮助吗?

解决方案

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

如果您绝对必须这样做,那么 Travis 的建议对于小表来说是不错的,但它的扩展性并没有那么好。

其他提示

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

形式

ID
姓名
ETC。

场地

ID
标签
价值

表单域

表单ID
字段ID

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top