相互依赖地计算物品

时间:2012-09-03 07:29:49

标签: java database-design jpa

我想开发一个java应用程序,用户应该可以根据彼此添加计算项。请考虑以下情况:

  • 添加一个值为50的项目(A)
  • 添加另一项(B),即项目A * 5
  • 添加项目(C),其值为(A * 50%)+ B
  • 删除项目(A)只要在其他项目中使用就会失败。

我可以将方程式存储为数据库中的varchar,并在我回忆起使用方程式解析器或类似的东西时将其解析回java。但是当我尝试这个时,问题是如果项目A被删除了?如果我使用varchar,数据库不会知道该项是否链接到另一个项目。我希望使用外键将项目相互链接,我该如何实现?

很抱歉,如果这是一个重复的问题,但我找不到能够解决问题的正确答案。

1 个答案:

答案 0 :(得分:2)

您可以使用tree java structure来表示表达式。每个节点将代表一个运算符和2个操作数。具体值将在叶级别。 在树上行走的计算很简单。

在DB中,您需要表达(树)指向其所有组件(树节点)的表示。

(或使用替代表达式树DB表示)

           EXP1:
        OPERATOR:+
          /    \
         /      \
        /        \
   OPERAND:1   OPERAND:2

数据库

表达式条目表

| ID     | NAME    |  DEPENDS_ON_NODE_ID  |
| 1      | EXP1    |  1                   |
| 2      | EXP1    |  2                   |
| 2      | EXP1    |  3                   |

节点表

| ID     | NAME     |  TYPE         |  VALUE |
| 1      | NODE1    |  OPERATOR     |   +    |
| 2      | NODE1    |  OPERAND      |   1    |
| 3      | NODE1    |  OPERAND      |   2    |