【发布时间】:2013-01-30 19:07:17
【问题描述】:
我正在尝试在 Oracle 表上应用一些业务规则(包含和排除规则)并根据规则更新状态列。稍后将根据状态列的值从该表中提取文件。现在企业想要使用 UI 配置规则。所以规则是动态的。
我计划将用户可能希望在其上使用业务规则的所有可能列存储在临时表中。在规则 UI 中,将显示此临时表中的所有列。然后我打算创建一个存储过程来从规则表中获取规则并使用动态更新语句来更新状态列。动态 SQL 会对此有好处吗?
规则表:
Id、RuleName、RuleDesc、ColumnName、运算符、值、连接器、ConnectOperator、RulePrecedence
连接器-连接到规则说
#1 Code=1001
#2 state='FL'
在第一条规则中,用户可以将#2 设置为 Connector,ConnectOperator 可以是“和/或”
或者我可以使用 C# 代码,将表中的所有行提取到对象中,然后使用 LINQ 查询根据规则过滤行并更新表。也许使用 NHibernate 作为 ORM,因为 Oracle 是底层数据库。但不确定Oracle的性能是否会好。要处理的行数可以在500K左右
我也很困惑,如果数据库将是存储规则的最佳位置,或者还有其他方式,但可以肯定的是用户想要配置和创建规则,并且规则可以引用可能属于不同表的列(即为什么我想将所有可能的列存储在暂存表中,尽管我知道它有局限性,如果企业想要在此暂存中不存在的列上创建规则,那么此架构将不起作用)
有什么建议我应该如何处理这个设计?
【问题讨论】:
-
您是否考虑过将他们指向现成的图形 ETL 产品,例如 Microsoft SSIS 或 Oracle Warehouse Builder?
-
你想如何使用 SSIS 呢?从临时表中获取所有行,然后使用脚本组件处理每一行?如果是 Oracle,那么我们可以使用 Informatica。性能会更好。但不确定 Informatica 是否有任何脚本组件。
-
性能不错,没错,没错。由于目标是提取文件,因此您可以包含该步骤。在我最了解的 SSIS 中,您可以使用图形编辑器配置转换和过滤器,该编辑器可以可视化转换块之间的数据流。它使用 .Net 数据库连接,因此连接到 oracle 应该足够顺利。
-
还不知道 Informatica,但在我找到的网页上看起来与 ssis 相似。
标签: c# oracle architecture rule-engine business-rules