2012-09-03 3 views
-2

Я хочу разработать приложение Java, в котором пользователь должен иметь возможность добавлять элементы расчета в зависимости друг от друга. Рассмотрим такой сценарий:Расчет элементов в зависимости друг от друга

  • Добавить элемент (А) со значением позволяет говорить 50
  • Добавить еще один элемент (B), который является элемент A * 5
  • Добавить элемент (C), который имеет значение (A * 50%) + B
  • Удалить элемент (A) не удается, поскольку он используется в других элементах.

Я могу хранить уравнения в виде varchar в базе данных и анализировать их обратно в java, когда я вспоминаю использование анализатора парсеров или что-то подобное. Но когда я попробовал это, проблема была в том, что если элемент A удален? База данных не знает, связан ли элемент с другим элементом, если я использую varchar. Я хочу, чтобы элементы были связаны друг с другом с помощью внешних ключей, как я могу это достичь?

Извините, если это дублированный вопрос, но я не смог найти правильный ответ, который решает мои проблемы.

+2

поэтому в чем вопрос? – aviad

+0

Не говорите, что вы хотите сделать, задайте реальный вопрос, на который можно ответить. – Sylar

+0

Извините, мой плохой, почему-то последняя часть вопроса не была опубликована. Я отредактировал мой вопрос – fareed

ответ

2

Вы можете использовать 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 | 
+0

Понятно, мне нужно сейчас думать об этом. Простой вопрос с хорошим ответом. Я не знаю, почему я все еще получаю downvotes. – fareed

Смежные вопросы