1

多数のデータベース整合性チェック ルールをシステムに統合するために使用するフレームワークを探しています。これは基本的に、データベース チェック用の自動テスト ケース ランナーである必要があります。

要件:

  • 新しいルールやチェックを簡単に作成
  • すべてのルールを簡単に実行できます。ルールのサブセットをグループ化するとボーナスになります
  • ルールの実行時または実行後の正確でシンプルなレポート

私は自分でこのようなものを書こうとしていますが、最初に何か他のものを見つけることができるかどうか見てみようと思いました. 私はそれをグーグルで検索しましたが、何も見つかりませんでした。

いくつかのルールの例:

  • [Rank] N の各レコードの子テーブルで、N が 0 であるか、[Rank] N-1 のレコードがあることを確認します。たとえば、子レコードは常に、特定の親に対して 0 から MAX(Rank) まで単調に増加するランクを持ちます。
  • 私たちのデータベースは、システム内のすべてのエンティティのヘッダー テーブルである単一の MasterEntity テーブルを持つグローバルな「タイプ/ID」システムを使用します。各エンティティ タイプは 1 つ以上の特定のエンティティ テーブルに属し、各エンティティ テーブルは 1 つ以上の特定のタイプのみを許可します。システム内のすべてのエンティティが、適切なエンティティ テーブルに正しいレコードを持っていることを確認してください。
  • すべてのセキュリティ保護可能な型がセキュリティ記述子テーブルにエントリを持っていることを確認します
4

6 に答える 6

1

これらのほとんどすべては、強化された整合性制約のトリガーを使用して処理できます。

説明したチェック タイプを含む、より詳細な制約セットを使用してリレーショナル データを設計する方法として、オブジェクト ロール モデリングに慣れることをお勧めします。

于 2009-06-14T16:38:33.687 に答える
1

私は何も知らない。これはおそらく、ほとんどの DBA がかなり保守的で、すぐに使用できるものをデータベースに入れることを許可しないためです。

  1. 一意の制約、外部キーなどを使用して、データベースにできる限り多くのことを強制します。それにもかかわらず、実際にはすべてを制約にエンコードできない場合がよくあります。たとえば、空のテーブルは常に制約を満たすため、テーブルが予期せず空になったときに通知する例外レポートが必要です。

  2. すべての例外処理を、一貫した命名規則 (つまりusp_Integrity_XXXX) を使用して個々の詳細なストアド プロシージャにカプセル化します。

  3. これらすべてのストアドプロシージャusp_Integrity_Masterを明示的に呼び出すか、動的 SQL を使用しINFORMATION_SCHEMAて適切なプロシージャを見つけて順番に呼び出し、すべての結果を適切なテーブルに記録し、電子メール、レポート、またはなんでもいい。

以前のギグでは、実際に各データベースのマスター整合性チェックを呼び出すエージェント ジョブがあり、メールで連絡がありました。(実際には、個々の問題のいくつかは、問題の追跡と修正を担当する適切なスタッフに電子メールで送信されました。特に統合シナリオでは、外部から入ってくる情報を単に止めることはできません。情報を無効にして後で修正する必要があります。 )

于 2009-06-14T18:08:00.087 に答える
1

It seems like you are looking for a system that allows you to declare database constraints of arbitrary complexity. I'm assuming that you want to catch violations of a constraint the moment they are made, and not in some post-factum verification procedure.

To do that, you need a relational DBMS, and alas, such a thing doesn't exist yet.

To do that in an SQL system, your only option is to write a vast lot of constraint enforcement code and stash those in triggers and such. If that is out of the question due to politics and such, there currently is no working solution to your problem.

Beware of those who guide you to Object solutions that cannot be tightly coupled to the DBMS itself. Eventually, someone will deploy some code that bypasses your outside-of-the-dbms constraint enforcement rules, leaving you exactly where you were when you decided to ask this question.

I agree with Spliff. Post factum constraint checking seems like a stupid idea to me too. But if that's what you really want, then here's a possible approach :

According to theory, all database constraints can be formulated as "a query whose result is required to be empty at all times". So such a query would, e.g., give you something like "all the pairs of distinct rows that have the same key value", or, generally speaking, such a query gives you a list of "all the things that are wrong".

Write down queries/scripts at a rate of one per possibly violated constraint, and run those overnight. Test if any of them return non-empty results.

于 2009-06-14T17:37:19.070 に答える
1

ここの回答からわかるように、データに対して非インラインの定期的なチェックを実行するという考えはあまり一般的ではありません。ただし、質問を「定義したルールで表現されているように、システム内のデータの状態を監視できるツールはありますか」という形で再構成すると、ここにいるほとんどの人がおそらく解決策のクラスについて話していることになります。使用する。

たとえば、ここにいるほとんどの DBA は、特定のテーブルのサイズを追跡したり、一定期間アイドル状態だったデータをチェックしたりするスクリプトを監視することを推奨していると思います。スクリプトの成功または失敗は、破損を構成しません。スキーマではありませんが、代わりに、何らかのメンテナンスまたは調査を実行するためのシグナルです。

システム監視ソリューションとして Nagios を使用しています。スクリプトを実行することによってチェックされるルールを定義できるようにするだけです。この場合、データベースのコマンド ライン インターフェイス (Oracle の場合は sqlplus) によって実行される .sql ファイルです。スクリプトは、成功、失敗、または警告の値を返す必要があります。通知方法 (メール、ページングなど) とタイミング (失敗するたび、または成功によって「クリア」されるまでの最初の失敗時) を設定し、イベントの履歴を追跡できます。ルール自体に関しては、ポイント アンド クリックによる制約の適用に関する「フレームワーク」はありません。独自の SQL を記述してルールを表現できる必要があります。

これは大きな分野です。「アプリケーション監視」についてググって、ニーズに合った製品を見つけてください。

于 2009-06-14T19:07:21.613 に答える
0

制約を使用して 2 つ目の同一のデータベースを構築し、データの移行を試みることで、正しい答え (制約とトリガー) と間違った答え (事後テスト) を混在させることができます。INSERT を実行しようとしたときに新しいデータベースがぐらつく場合は、エラーが発生しています。「政治」の問題が解決したら、すべてを永久に移行できます。

于 2009-06-14T17:41:44.177 に答える
0

BG Benchmark ( http://www.bgbenchmark.org) をお勧めします。これは、さまざまなデータストア (SQL データストアと NoSQL データストアの両方) を評価するために使用されるベンチマークです。そのユニークな機能の 1 つは、他のベンチマークやフレームワークでは提供されていない古いデータの量を定量化する機能です。

現在、BG はソーシャル ネットワークをサポートするためにデータとアクションをモデル化しています。ルールに合ったアクションを定義できます。

于 2014-09-12T00:25:15.553 に答える