アプリ版:「スタンプのみでお礼する」機能のリリースについて

よろしくお願いします。
自分は、数年間開発経験のあるSEです。

Oracleの参照整合性制約は、実装するのが当たり前と思ってましたが、そうでもないのでしょうか?

というのは、情報処理の本などを見ると
「RDBMSは参照整合性制約の実装により、更新異状を排除することが重要な機能」
などと書いてあり、なるほど、そうかと思ったものでした。
もちろん、開発に携わったシステムでも実装されてました。ここまでは良かったのですが・・・

最近、関わっているシステムは、Oracleですが、参照整合性制約は実装されおらず、
全てアプリケーションがその辺を頑張ってます。

まあ、古いシステムなのでしょうがないかと思っていたのですが、今度のシステム更改(DB再設計含む)でも、
参照整合性制約は実装しない、というのです。

なんで実装しないのか、DB担当でないので分からないのですが、参照整合性制約を実装しないRDBなんて
クリープを入れないコーヒーのようなものではないかと、私は思うのです。

この感覚は、正しいのでしょうか?

専門家の方、経験豊富な方、ご意見お待ちしております。
よろしくお願いします。

A 回答 (3件)

これには賛否両論があるので一概にどちらがよいとは言い切れません。

私はDBの物理設計コンサルタントとして客先でDBの物理設計を担当したことがありますが、その際には開発環境では参照制約を設定し、本番環境では競ってしないということに決まりました。

制約を付けるということは、DML文が発生するたびに整合性のチェックされることになるので (Oracle にはチェックするタイミングを設定するオプションもあるが)、性能の劣化の原因にもなり得ます。

特に、参照制約の場合には他のテーブルにまで検索しに行く必要があるため、どうしても他の制約に比べてオーバーヘッドが大きくなってしまいがちです。

そのために付けないことも多いですが、だからといって、参照制約を設定できないようなDB設計をすることは望ましいとは言えません。

あと、既にお気づきのようですが、参照制約を設定したからといってアプリケーション側のハンドリングが不要になるわけでもありません。まさか、ユーザとのインターフェースに ORA-XXX と表示されるようなアプリケーション設計はされないでしょうから。
    • good
    • 0
この回答へのお礼

> 開発環境では参照制約を設定し、本番環境では競ってしな

なるほど!そういう方法もあるのですね。

> 参照制約を設定できないようなDB設計をすることは望ましいとは言えません。

ですよね!
つまり、設計上は(当然のことながら)参照整合性を保証するような設計(アプリも)を行い、
開発環境では念のため参照制約を実装しておいて、思わぬアプリのバグなどを見つけるのに役立てる、と。

本番では、性能を睨みつつ実装するかどうかを考えても良い訳ですね。

かなり、心のモヤモヤが晴れたようです。

ありがとうございます!

お礼日時:2006/03/02 13:06

>専門家の方、経験豊富な方、ご意見お待ちしております。


これには該当しませんが...

私も参照整合性制約は実装するほうが望ましいと思います。ただし、画面などを使用したアプリの場合、違反レコードに対するエラーメッセージはOracleそのままよりユーザーに分かり易いメッセージにしたり、強制ロールバックよりエラーデータ保存処理するなど、適切なエラー処理は必要になってくると思います。となると、プロジェクトリーダーは「画面側で整合性チェックと等価の機能を実装しているから管理面、工数を考えてなくしちゃえ」と参照整合性制約を実装しないという考えの方もいらっしゃると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

確かに制約をDBで実装していても、けっきょくアプリでハンドリングは必要ですよね。
だったら最初からDBでは制約しなくていいか、ということにもなるかもしれませんね。

お礼日時:2006/03/01 18:20

僕はブラックが好きです(笑 というのはさておき)


確かにうまくはまれば便利なので、理想としてはそうしたいですが、
参照整合性制約って、問答無用/厳格に適用されてしまうので、
データメンテのときなどのイレギュラーな処理や仕様変更の際に妙に不便だったりすることがあります。
また、そういう制約が破綻するような仕様変更があったときに、
制約をはずして、自前のチェックロジックをあちこちに実装しないとならなくなるので、
だったら最初から自前でチェックしとけばって感覚でしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> そういう制約が破綻するような仕様変更があったときに、
> 制約をはずして、自前のチェックロジックをあちこちに実装しないとならなくなる

なるほど、そういうことは考えてみませんでした。
いったん実装した制約を外すのはかなり怖いですね。

そこまで見越して、実装の有無を考えることもあり得る、ということですね。

お礼日時:2006/03/01 18:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す