FC2ブログ

参照整合性制約

データベースで参照整合性制約というものがありますが、
私が受け持っているシステムでも使用しています。

今、そのシステムの改修作業をしているのですが、この
参照整合性制約が邪魔して、データの更新ができないので
悩んでいました。

親表と子表を同時に更新する方法がないかどうか調べてみたのですが、
どうやらオラクルにはその機能はないらしく、どうやって実装しようか
ずっと考えていました。

調べた記事の中には、参照整合性制約をシステムで使うなんて
意味がないというような記述もありました。
私のシステムで使っているから弁護するわけではないのですが、
実際に使うことで整合性がとれるわけだし、必要な機能だと思います。
もちろん短所もありますが、それは使い方の問題でしょう。

それは置いといて、なぜ困っているかと言うと、
親表(A表)、子表(B表)があり、A表に更新掛けようとすると、B表と
食い違ってしまうからエラーとなるわけです。

この現象に対して、どのように対処したかと言うと、まず、
更新対象のA表のデータを更新データを含めてコピー(INSERT)します。

A表にはB表にデータを作成するINSERTトリガーが張ってあるので、
B表にも整合性のとれたデータを作成します。

その後、A表の元データを削除します。
参照整合性制約には、ON DELETE CASCADEオプションを付けているので
B表のデータも同時に削除されます。

もっといい方法もあるかもしれませんが、とりあえずこれで対応できました。
考えれば何かと思いつくものですね。
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

やまやま

Author:やまやま
40代の♂です。

IT業界で仕事してます。

趣味はマンガと英語学習。
あと科学、環境問題を扱った
雑誌を読むこと。

FC2カウンター
リンク
最近の記事
カテゴリー
最近のコメント
ブログランキング
ブロとも申請フォーム

この人とブロともになる

最近のトラックバック
ブログ内検索
月別アーカイブ
RSSフィード