1

フラットな構造ではなく、リレーショナル データベースを作成することになっています。他のテーブルとの関係を持つテーブルを作成します。正規化して重複を取り除き、非正規化してパフォーマンスを向上させます。これはすべて理にかなっています。しかし、リレーショナル構造に挿入する適切なメカニズムを見つけるのに苦労しています。リレーショナル構造にレコードを挿入するための適切なメカニズムはありませんか。次のようなものがありますか:

INSERT INTO x LEFT JOIN y ON x.id = y.id VALUES(...)?

私が思いつくことができる最高のものは、次のストアド プロシージャです。

INSERT INTO x
SELECT id FROM x (or @@id)
INSERT INTO y

これは、リレーショナル モデル全体に​​反するようです...

これは、結合がない場合と同等の挿入です。複数の選択を行い、結果を自分で結合する必要があることに我慢できますか?

4

1 に答える 1

1

正規化して重複を取り除き、非正規化してパフォーマンスを向上させます。

正規化して、特定の種類の更新の異常を取り除きます。SELECT のパフォーマンスを向上させるために非正規化しますが、通常は更新のパフォーマンスと更新の異常を犠牲にします。

リレーショナル モデル自体は、更新可能なビューをサポートするだけでなく、更新可能なビューを必要とします。しかし、私の知る限り、これはまだ研究分野です。最も一般的なケースでビューの更新をサポートする必要がある場合は特に、技術的な問題は重大です。

現在の SQL 製品は、せいぜい限られたサポートしか提供していません。(そして、SQL はまだリレーショナルにはほど遠いです。) ここ数年、更新可能なビューが必要な場合はトリガーを作成する必要があると考えるようになったと思います。

アプリケーション コード、トリガー、またはストアド プロシージャのいずれでこれを行う場合でも、ある時点で、トランザクションにラップされた複数の INSERT ステートメントに行き詰まることがあります。

于 2012-10-22T21:39:16.153 に答える