Database design 可扩展web表单的数据模型

Database design 可扩展web表单的数据模型,database-design,forms,Database Design,Forms,假设我有一个包含三个10字段的表单:field1..field10。我将表单数据存储在一个或多个数据库表中,可能使用10个数据库列 现在假设几个月后,我想再添加3个字段。将来,我可能会根据不断变化的需求在此表单中添加/删除字段。如果每个表单字段都有一个数据库列,那么每次更改表单时都必须对数据库进行相应的更改。这似乎是维护方面的头痛问题。一定有更复杂的方法 所以我的问题是,如何设计一个与UI松散耦合的数据模型?一个具体的用例是可由用户扩展/自定义的CRM系统 您可以将字段抽象到一个单独的表中,以便

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

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


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

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

形式 ID
名称
等等

领域 ID
标签
价值观

福尔菲尔德 FormID

FieldID

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


如果你一定要这么做,那么特拉维斯的建议对于小桌子来说是不错的,但它并不能很好地扩展。

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

我以前使用数据库中的XML列来存储额外的字段。我通常只是在XML列中有一个大的属性包,然后在执行更新或插入时使用XSD强制执行验证。在检索数据时,我在XSL或对象模型中有一些规则,这些规则根据属性节点中的数据类型确定是否显示元素、要应用的其他格式以及要用于web表单的输入元素的类型

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

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

大多数数据库现在对这类事情都有一流的XML支持。例如,在SQLServer中,您可以将XSD模式应用于数据库中XML数据类型的列。在最新版本中,还支持对这些列进行索引