【问题标题】:Best Approach to support dynamic database支持动态数据库的最佳方法
【发布时间】:2012-09-19 03:50:17
【问题描述】:

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

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

【问题讨论】:

  • 你要去哪所大学 - 我们刚刚有一个非常相似的问题。
  • @dngfng 不是大学问题,伙计,这是我的办公室项目要求..:P
  • 我们如何每周都得到这个问题?
  • 因为客户每周都会向刚毕业的新手程序员提出这个问题。客户一直希望有灵丹妙药,并且这个他们从未见过的刚毕业的孩子知道如何开枪。而且因为没有一个人可以接受“不”作为答案。
  • 已经一个多星期了。您是要接受答案还是向我们提供更多信息?

标签: java database postgresql database-design


【解决方案1】:

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

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

列号也可以更改为列名。当然应该有另一个表格,您可以在其中保存每个表格有多少列。 这是最简单的解决方案。当您需要为不同的列提供不同的数据类型时,事情会变得更加复杂。

【讨论】:

    【解决方案2】:

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

    表格

    • 身份证
    • 姓名

    form_column

    • 表单 ID
    • 属性

    实体

    • 身份证
    • 表单 ID

    实体属性

    • 实体 ID
    • 表格列
    • 属性
    • value(你可以只使用字符串,或者有一个 value_string、value_int 和 value_float)

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

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

    【讨论】:

      【解决方案3】:

      您需要构建与名为“Randy”的人完全相同的解决方案

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-05-14
        • 1970-01-01
        • 2012-05-25
        • 2023-02-11
        • 1970-01-01
        • 2012-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多