-2

我想开发一个 java 应用程序,用户应该能够根据彼此添加计算项。考虑这种情况:

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

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

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

4

1 回答 1

2

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

在数据库中,您将需要表达式(树)的表示,指向其所有组件(树节点)。

(或使用替代表达式树 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    |
于 2012-09-03T08:06:42.533 回答