假设我有一个包含三个10个字段的表单:field1..field10。我将表单数据存储在一个或多个数据库表中,可能使用10个数据库列。
现在假设几个月后我想再添加3个字段。在将来,我可以根据不断变化的要求添加/删除此表单中的字段。如果每个表单字段都有一个数据库列,那么每次更改表单时我都必须对数据库进行相应的更改。这似乎是一个维护头痛的问题。必须有更复杂的方式。
所以我的问题是,如何设计一个与我的UI松散耦合的数据模型?具体的用例是可由用户扩展/定制的CRM系统。
答案 0 :(得分:2)
您可以将字段抽象到单独的表中,以便它们与Form表的多对多:
<强> ID 强>
名称
等
<强> ID 强>
标签
值
<强> FormID 强>
的 FieldID 强>
答案 1 :(得分:1)
除非你有充分的理由这样做,否则这通常是一个坏主意。这使得优化和扩展数据库变得非常困难。
如果你绝对必须这样做,那么Travis的建议适用于小桌子,但它的确不能很好地扩展。
答案 2 :(得分:0)
当我在AIMS(www.totalaims.com)上为Quest Computing工作时,我的团队为此提出了解决方案。总之,我们添加了维护屏幕,允许管理员添加元数据,并因此在某些表中向数据库添加字段。这些字段也会自动添加到自己的维护和搜索屏幕中。我们在OpenACS之上构建了它。您可以在www.openacs.org上找到更多信息 - 搜索“flexbase”或“dynfields”或查看www.project-open.org/doc/intranet-dynfield/。这非常有效 - 它们的主要缺点是主要优势的副作用,即非DBA可以完成字段的添加,因此性能很容易受到影响。
答案 3 :(得分:0)
我过去使用数据库中的XML列来存储额外的字段。我通常只在XML列中有一个大的属性包,然后在进行更新或插入时使用XSD强制验证。当我检索数据时,我在XSL或对象模型中有规则来确定元素是否显示,要应用的其他格式和Web表单根据属性节点中的数据类型使用哪种类型的输入元素。
如果需要关联存储一些数据并且可扩展地存储其他数据以避免宽表具有大量空行效果,那么它的效果非常好。
如果您不需要对数据进行关系处理,例如加入或转动数据库中的其他表,那么一个简单的自包含XML表单也是一个很好的解决方案。
现在大多数数据库都有这种东西的一流XML支持。例如,在SQL Server中,您可以将XSD架构应用于数据库中的XML数据类型列。在最近的版本中,还支持对这些列进行索引。