2011-07-15 28 views
1

私はかなり非正規化された既存のテーブルを持っています。リストのステータス、タイプ、国などのルックアップテーブルはありません。このオリジナルデザインは、データベースへのアプリケーションのアクセスを単純化するために行われたため、この非正規化のパフォーマンス上の理由はありませんでした。挿入時にデータベースルックアップテーブルを自動的にマップする方法(Oracle)

これにより、重複したデータがたくさんあるテーブルが作成されました。さまざまなステータス/タイプ/国の列のルックアップテーブルを導入することで適切に正規化したいと思います。

クライアントに透過的になるデータベース(oracle)でこれを行うことができますか?アプリケーションは引き続き挿入を行いますが、データベースは場面の裏側の適切なルックアップテーブルに物事をマッピングします。

私は、マッピングを行うビューとトリガーの組み合わせを試してきましたが、これを行うためのより自動的な方法が必要なように感じています。

答えて

7

一般的に、更新可能なビューを作成できる場合は、変更をユーザーに透過的に表示できます。

  1. ベーステーブルを3NF、BCNF、または5NFに正規化します。
  2. 元のベーステーブルの名前を変更します。
  3. 元の非正規化ベーステーブル と同じ名前、列、および行を持つ更新可能なビューを作成します。
  4. 新しいビューのアクセス許可が元のベーステーブルの のアクセス許可と関連していることを確認します。
  5. 試験。
  6. 完了するまで繰り返す。

元の基本表をSELECT、INSERT、UPDATE、またはDELETEしようとするクライアントソフトウェアは、更新可能なビューを代わりに使用します。これは、テーブルとビューが名前空間を共有するためです。これは事故ではありません。dbmsとサポートコードにより、正しいことが確実に行われます。

プラットフォームと分解によっては、更新可能なビューを作成するのが簡単で、不可能な場合があります。 Oracleでは、最悪のケースは、すべてのクエリ操作をサポートするためにINSTEAD OFトリガを記述する必要があると思います。それはあまりにも悪くありません。

しかし、SOをノックして数ヶ月にして、私はあなたが本当にこれを行う必要があると自信を持っているとは言えません。あなたのテーブルのDDLと代表的なサンプルデータをSQL INSERTステートメントとして投稿すれば、より良い、より具体的な提案ができます。

+0

優れた要約をいただきありがとうございます。それは私が実験してきた基本的なアプローチですが、私はPL/SQLの達人になる必要はありません。 –

+2

@James「PL/SQLの達人になる必要はありません」と私はさらに喜んでいます。私はポニーが欲しい。悲しい事実は、最初から正しく作業するためには努力が必要だということです。飛行機の飛行中に泥の大きな球に厳しさとデザインを適用することは、さらに多くの努力を必要とします。良いニュースは、私たちが手伝ってくれることです。 – APC

+1

私はポニーが欲しくない。私の犬は年を取っています。 –

関連する問題