当前问题与软件用户(客户)想要评估材料的情况有关。可以使用1个或多个条件(用户可以在软件的主管区域中添加和删除)来完成此评估。请注意,评估结果必须保存在数据库中,以备将来查阅。
其他信息:该软件使用Java编码。
假设三个表。表Material
,表Evaluation
和表Criteria
。
请注意,PK idMaterial
是Evaluation
中的FK。
下图说明了表格:
这三个表是实际表的简化。 “条件”表将条件变量命名为标准变量,并根据评估计算出的最终分数设置其权重。
在这种情况下,目标是用户能够添加和删除条件。 在定义了标准之后,他就可以为物料创建评估。
并使用这些条件在数据库中保存评估。
换句话说,我需要存储赋予每个用户定义标准的分数。
从技术角度来看,我们注意到:
我正在寻找更好,更安全的解决方案。
任何建议都将不胜感激。我希望我尽可能明确地提出这个问题。
解决方案没有任何限制,除了,我使用的是Java和MySQL。 如果需要,我可以创建更多表,并且可以允许用户添加/删除列。
答案 0 :(得分:0)
然后,基于您的评论,您应该只创建一个标准表,用户在其中添加一行以指定评估标准。添加和删除此文件将更加安全,因为您无需更改实际的表属性,而是操作条目
编辑:
要使用此功能,只需使用INSERT INTO
语句,即可在其中将值插入到列中。
答案 1 :(得分:0)
但是,之后如何创建评估?由于在您的解决方案中,每个条件都是连续的...请您举例说明吗?
在我们的系统之一中,我们拥有相等的条件,用户可以为某个事物定义0到无限的标准。
因此,您需要使用行。
详细信息,用户可以附加一个或多个filters
(它们是or
),其中每个过滤器可以包含一个或多个criterias
(它们是and
'd)
从代码方面进行评估看起来像这样。 (这不是复制/粘贴代码,但可能会给您一个想法)。 environmentVariables
基本上是一张地图,其中包含我们要在其上应用过滤器的对象属性:
public static boolean evaluate(Filter filter, Map<String, Object> environmentVariables) {
for (Criteria criteria : filter.getCriterias()) {
if (!evaluateCriteria(criteria, environmentVariables)) {
// one missmatch -> false.
return false;
}
}
// all criterias matched, that filter is true.
return true;
}
public static boolean evaluateCriteria(Criteria criteria, Map<String, Object> environmentVariables) {
if (environmentVariables != null) {
if (environmentVariables.containsKey(criteria.getKey())) {
return evaluateCriteria(criteria, environmentVariables.get(criteria.getKey()));
}
}
return false;
}
private static boolean evaluateCriteria(Criteria criteria, Object value) {
switch (criteria.getOperator()) {
case LIKE:
if (value != null) {
return value.toString().toLowerCase().contains(criteria.getValue().toString().toLowerCase());
} else {
return false;
}
//other OperatorTypes
case STARTSWITH: // code...
case ENDSWITH: // code...
case EQUALS: // code...
case GREATER_THAN: // code...
case GREATER_THAN_EQUAL: // code...
case LESSER_THAN: // code...
case LESSER_THAN_EQUAL: // code...
default:
throw new UnsupportedOperationException(criteria.getOperator() + " is not defined");
}
}
答案 2 :(得分:-2)
添加带有两个外来功能作为主键的额外表条件。.正如我所说的,最后一个解决方案存在两个解决方案,并且您已经得出结论