Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 支持动态数据库的最佳方法_Java_Database_Postgresql_Database Design - Fatal编程技术网

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

Java 支持动态数据库的最佳方法,java,database,postgresql,database-design,Java,Database,Postgresql,Database Design,我的项目需要支持可配置表单格式。我的意思是,用户可以向表单中添加“n”个列(用于设计表单),然后必须将列数据保存在数据库中。稍后,我还想在这些列上查询where子句 但是由于列的数量和类型不是固定的,我如何设计我的数据库来支持这样的功能??我使用Java作为我的编程语言和PostgreSQL数据库。您需要构建完全相同的解决方案,就像在年被称为“Randy”的人所做的那样 你也可以在谷歌上搜索“内部平台效应”,因为如果你试图构建符合该要求的东西,那么这正是你要做的 您只需在现有DBMS之外重新创

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


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

您需要构建完全相同的解决方案,就像在年被称为“Randy”的人所做的那样

你也可以在谷歌上搜索“内部平台效应”,因为如果你试图构建符合该要求的东西,那么这正是你要做的

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

您的用户正在寻求一种可以立即构建的软件解决方案,该解决方案能够并且将能够满足未来可能遇到的所有需求,而无需IT人员的进一步干预(意思是:你的用户承担起数据库设计师的角色,但没有这样做的技能,同时希望你的应用程序能够填补所有需要但用户没有的知识缺口,来扮演这个角色)


你觉得这是一个合理的要求吗?你真的认为构建这样一个应用程序甚至有点可能吗?嗯,这是可能的,某种程度上。这样的应用程序确实存在。它们被称为DB2、Oracle、Sybase、PostgreSQL……我毫不怀疑,构建与之匹配的应用程序对你来说是遥不可及的用户可以等待的时间范围内的数据。

这并不像听起来那么难。您只需要为表单中的列和每个实体中的值(已填充表单的一个实例)创建一个单独的表。这有时是调用和

形式

  • 身份证
  • 名字
表格列

  • 表格ID
  • 纵队
  • 属性
实体

  • 身份证
  • 表格ID
实体属性

  • 实体ID
  • 表格栏
  • 属性
  • 值(您可以只使用字符串,也可以使用value\u字符串、value\u int和value\u float)
要搜索实体,您的查询屏幕可以通过在WHERE子句中添加“或(实体\u属性。实体\u id=实体。实体\u id和实体\u属性。属性=FOO和实体\u属性。值=BAR)”子条款来构建SELECT语句


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

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

-------------------------------
| formId | columnNo | value   |
-------------------------------
| 1      | 1        | first   |
-------------------------------
| 1      | 2        | second  |
-------------------------------
| 1      | 3        | third   |
-------------------------------
列号也可以更改为列名。当然,应该有另一个表,用于保存每个表单的列数。
这是最简单的解决方案。当不同的列需要不同的数据类型时,事情会变得更复杂。

你要去哪所大学-我们刚才有一个非常类似的问题。@dngfng不是大学问题,伙计,这是我的办公室项目要求。:我们每周都会收到这个问题吗?因为客户一直在问这个问题每周都会向新来的校外节目制作人发出警告。是客户一直希望有一颗银弹,而这个他们从未见过的新来的校外节目制作人知道如何发出警告。因为没有人能接受“不”已经一个多星期了。你打算接受答案还是给我们更多的信息?