【问题标题】:Calculating Items depending on each other [closed]计算项目相互依赖[关闭]
【发布时间】:2012-08-27 22:36:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • 那么问题是什么?
  • 不要说你想做什么,问一个可以回答的真实问题。
  • 对不起,问题的最后一部分没有发布。我已经编辑了我的问题
  • @aviad 请看已编辑的问题,您不必投票,问题的最后一部分没有发布,现在我已经发布了。
  • 发布现有的数据库架构。

标签: java database-design jpa


【解决方案1】:

您可以使用tree java structure 来表示表达式。每个节点将代表一个运算符和 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    |

【讨论】:

  • 我明白了,我现在需要这样想。一个简单的问题,一个很好的答案。我不知道为什么我仍然在投票。
猜你喜欢
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多