我有兴趣了解是否存在用于检查数据库中的数据的通用技术/模式是否符合一组规则。或许,我感兴趣的是每晚运行一项服务/工作,这会导致数据流失并引发规则异常。我非常希望系统是动态的,即定义新规则非常容易。
一个非常简单的例子可能是:
Customer Cash%
A 50
B 25
C 30
规则:告诉我所有客户 < 50%现金。
我并没有真正融入特定的工具或想法,但我们的专长是C#,XML和Sql Server。我们所有的数据都在SQL SERVER数据库中。
如果没有任何内容我将回到查看自定义规则定义系统,目前我的想法是基于XML中定义的规则(针对动态方面)和针对规则的Windows服务流程数据。
干杯。
编辑:我应该说这可能会变得复杂,我想根据“模型”检查一堆表及其数据,以查看特定对象是否遵循规则。例如,可能存在“模型”客户,并且您想要检查有多少客户不遵守模型规则,例如现金,最后付款,国籍等。编辑:继一些评论后,我完全理解应该首先防止输入“无效”数据。我的场景处理的事实是数据可能完全有效,但它可能不遵循“内部规则”,因此可能需要证明不符合规则的事情是合理的。
答案 0 :(得分:2)
由于尚未提及,我建议你看一下 SQLServer的数据挖掘功能。其中之一是无法突出显示数据中的异常。
看看这个Highlight Exceptions Video Tutorial让你入门。
答案 1 :(得分:1)
创建一个SQL语句脚本,其中一个语句等于单个规则。在您的示例中,您的陈述可能是:
INSERT INTO EXCEPTION
(RULE_NAME, DETAIL)
VALUES
("CASH_LEVEL_LOW", SELECT CUSTOMER_ID FROM CUSTOMER WHERE CUSTOMER.CASH < 50);
我不是最新的语法,但你应该能够从这里得到这个想法的要点。它会在每个违规中插入一个记录,并有足够的数据,以便您可以轻松找到记录。
答案 2 :(得分:0)
您最好的选择可能是在SQL Server中创建维护计划,每个规则的计划中只有一步。每个规则都会检查数据并在发现任何不合规则时插入到异常表中。这将允许您利用SQL Server提供的工具并保持规则本身的相当容易的维护(添加,删除和重新排序)。
答案 3 :(得分:0)
我非常希望系统是动态的,即定义新规则非常容易。
你已经拥有这样一个系统;这是你的数据库。特别是,检查约束用于防止输入无效数据。
对于类似于您的示例的情况 - 您希望允许值但标记它的位置 - 编写视图,并让客户端应用程序在视图有任何行时发出错误。
这是一个例子: 从表中创建视图low_on_cash作为select *,其中“Cash%”&lt; 50;
在客户端中,如果出现错误,则会引发错误 “从low_on_cash中选择计数(*)”没有返回0;
如果您建立了一个所有此类视图都使用前缀命名的约定,例如“error_report”,您的客户端可以在一个查询中从数据库的systables中选择所有此类视图名称,然后通过调用{{}来迭代该列表1}}记录任何返回超过零行的错误。
由于这是数据驱动的,因此添加新的错误报告只不过是创建一个具有正确名称前缀的视图;你不必重新编译客户端。
额外的好处是,添加任何规则引擎都需要学习其特定领域语言来编写规则,培训新员工,即使这样,也不可避免地存在规则不容易涵盖的极端情况。你的程序员已经知道SQL了,而且它是基于一个17岁的ANSI标准,基于20多年的使用年限,所以大部分的角落案例已经被语言解决了。
答案 4 :(得分:0)
我个人不允许在数据库中输入不遵循业务规则的数据。这就是检查约束,唯一索引和触发器的用途。