支持动态数据库的最佳方法

时间:2012-09-27 11:12:14

标签: java database postgresql database-design

我的项目需要支持可配置的表单格式。我的意思是用户可以向表单添加“n”列(设计它),然后列数据必须保存在数据库中。稍后我还想查询where子句的那些列。

但是由于列的数量和类型没有修复,我如何设计我的数据库来支持这样的功能?我使用Java作为我的编程语言和PostgreSQL db。

3 个答案:

答案 0 :(得分:1)

您需要一个包含列值的单独表:

-------------------------------
| formId | columnNo | value   |
-------------------------------
| 1      | 1        | first   |
-------------------------------
| 1      | 2        | second  |
-------------------------------
| 1      | 3        | third   |
-------------------------------

列号可以替换为列名。当然应该有另一个表格,你可以保留每个表格有多少列。 这是最简单的解决方案。当您需要针对不同列的不同数据类型时,事情变得更加复杂。

答案 1 :(得分:0)

你需要建立与“兰迪”在

中所做的完全相同的解决方案

http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/

你也可以google'内部平台效应',因为如果你尝试构建符合该要求的东西,那么这正是你将要做的。

您只需在现有DBMS之外重新创建DBMS。您将在应用程序代码中重新创建类型和域检查,而现有的DBMS已经拥有它们,并且与DBMS已经免费提供的目的完全相同。您将重新创建表达式解析器和编译器,而您现有的DBMS已经拥有它们。您将重新创建数据访问策略的选择,而您现有的DBMS已经拥有它们。您将重新创建的每件小事以及您现有的DBMS已经拥有的,将是您现有DBMS已经拥有的更糟糕的版本。

您的用户正在寻找可以立即构建的软件解决方案,并且可以并且将满足将来可能遇到的所有可能需求,而无需IT人员的进一步干预(意味着:您的用户所处的位置)数据库设计师的角色,虽然没有这方面的技能,同时希望你的应用程序能够填补所需的所有知识空白,但用户没有,以发挥这个作用。)

听起来像合理的要求吗?您是否真的认为构建此类应用程序甚至可以远程实现?嗯,有可能,有点。这样的应用确实存在。它们被称为DB2,Oracle,Sybase,PostgreSQL,......我毫不怀疑,您可以构建与用户可以等待的时间段相匹配的东西。

答案 2 :(得分:0)

这并不像听起来那么难。您只需要一个单独的表格,用于表单中的列和每个实体中的值(填写表单的一个实例)。这有时是来电和Entity Attribute Value model

形式

  • ID
  • 名称

form_column

  • 表格ID
  • 属性

实体

  • ID
  • 表单ID

entity_attribute

  • 实体ID
  • 表格栏
  • 属性
  • value(你可以使用string,或者有一个value_string,value_int和value_float)

要搜索实体,您的查询屏幕可以通过将“OR(entity_attribute.entity_id = entity.entity_id和entity_attribute.attribute = FOO和entity_attribute.value = BAR)”子条款添加到WHERE子句来构建SELECT语句。 / p>

另一种方法是将表单设计和实体(填写表单)存储为XML。从那里,您可以使用XMLBeans或DOM解析器来处理实体。