0

Oracle テーブルにいくつかのビジネス ルール (包含および除外ルール) を適用し、ルールに基づいてステータス列を更新しようとしています。ステータス列の値に基づいて、後でこのテーブルからファイルが抽出されます。ここで、企業は UI を使用してルールを構成したいと考えています。したがって、ルールは動的になります。

ユーザーがビジネス ルールを使用する可能性のあるすべての列をステージング テーブルに格納することを計画しています。ルール UI では、このステージング テーブルのすべての列が表示されます。次に、ルール テーブルからルールをフェッチし、動的更新ステートメントを使用してステータス列を更新するストアド プロシージャを作成する予定です。動的 SQL はこれに適していますか?

ルールテーブル:

Id、RuleName、RuleDesc、ColumnName、Operator、Value、Connector、ConnectOperator、RulePrecedence

コネクタ - ルールに接続するには、次のように言います

#1 Code=1001
#2 state='FL' 

最初のルールでは、ユーザーは #2 をコネクタとして配置でき、ConnectOperator は「and/or」にすることができます

または、C# コードを使用してテーブルからすべての行をオブジェクトにフェッチし、LINQ クエリを使用してルールに基づいて行をフィルター処理し、テーブルを更新することもできます。Oracle が基礎となるデータベースであるため、NHibernate を ORM として使用することもできます。しかし、パフォーマンスが Oracle で良いかどうかはわかりません。処理される行数は約 500K になる可能性があります

データベースがルールを保存するのに最適な場所になるか、他の手段があるかどうかも混乱していますが、ユーザーがルールを構成および作成したい場合、ルールは異なるテーブルに属する可能性のある列を参照できます(そのため、私は可能なすべての列をステージング テーブルに格納するには、制限があることは理解していますが、ビジネスがこのステージングにない列にルールを作成したい場合、このアーキテクチャは機能しません)

このデザインにどのようにアプローチすべきか提案はありますか?

4

2 に答える 2

1

ルールをデータベース テーブルに保存し、ストアド プロシージャと動的 SQL を使用して実行時に実行しました。SQL クエリのパフォーマンス チューニングを行う必要がありましたが、現在は正常に動作しています。45 分以内に 64 MN レコードを処理できましたが、これは悪くありません。ルール処理にはセットベースの操作 (update ステートメント) を使用しました。

于 2013-05-29T14:04:14.220 に答える
0

この問題に取り組むには多くの方法があり、標準的な解決策はありません。「Rule Engine」と「ETL」をグーグルで検索すると、多くの人がソリューションを提示していることがわかります。

私が見つけた最も柔軟なソリューションは、グラフィカルな ETL ツールを既存のルール エンジンと統合するものです。これにより、既存の製品が活用され、プロセスの両側が適切に分離され、柔軟に保たれます。また、単一の行をルール エンジンにフィードしても、十分なパフォーマンスが報告されます。

C# または Java でルールを評価する主な利点は、標準のルール エンジンを使用できることです。そのため、ルール エンジンに付属するすべてのシンタックス シュガーとグラフィック編集を無料で利用できます。あなたのビジネスは物事のルール面で暴走する可能性があり、気付かないことさえあります.

ORM ツールを使用してデータをフェッチして更新することはお勧めしません。ステータス列を更新するために必要な情報は、1 つの同じ行に存在する必要があるため、ORM ツールは必要ありません。単純なデータセットで十分です。

余談ですが、Oracle は Java-in-the-database の実験を行っているので、Java ルール エンジンをデータベースで実行することもできるのではないでしょうか?

于 2013-02-01T12:14:20.473 に答える