2012-03-01 8 views
0

私は、外部キー制約を使用するデータベースで動作するアプリケーションを持っています。エンド・ユーザーにわかる外部キー制約の警告

たとえば、case_namesという名前のテーブルを参照する外部キー制約を持つインベントリテーブルがあります。ユーザーがそのIDを参照するインベントリ項目を含むケース名を削除しようとすると、その操作は制限されます。

ユーザーに理解できるメッセージを表示するにはどうすればよいですか? 'まだこのアイテムに在庫アイテムが含まれているため、このケースを削除することはできません。'

私の考えは、try-catch(さまざまなエラータイプを捕まえていますか?)ですが、これを期待しているものに使用したくはありません。

アプリケーションは、私は、ユーザーのエラーや通常のプログラムフローを処理するために例外を使用することはありませんMySQL.data

+0

削除を試行した後で例外をキャッチしていますか、削除を試行する前に関連するアイテムを確認していますか? – Nanhydrin

+0

削除後に例外をキャッチしようとしました。 – Jeff

答えて

2

を使用してVB.Netです。 ユーザーが(おそらくストアドプロシージャを使用して)レコードを削除できるかどうかを確認し、警告メッセージを表示しない場合は、

私は例外が予見できないエラーのためだと思います。

編集明確にする:

ストアドプロシージャ(またはあなたのプログラムのコードが)、それは削除でさえCOUNT()影響を受けることができますどのように多くのレコードまたは関係するすべてのテーブルの上のチェックを行うことができます要求。

「それはまだ32の在庫 項目が含まれてあなたはこの場合を削除することはできません:あなたはあなたの例では、在庫アイテムがケースに接続されているどのように多くのユーザーを伝えるという付加的な利点を有するカウントすることにより"

編集の詳細を明確にする:

これは、参照整合性が正しくもちろんのDBに設定されるべきではないと言っているわけではありません。いくつかのチェックを忘れた場合でも、あなたのために働くDBがあります(そして、ユーザーはプログラムが言っていることを知るためにあなたに電話します:))。

+0

私は同意する - それが私がやりたいことについてどうやって行くのか分からない理由です。私はちょうど彼らが外国キーの制約から始まるエラーを見るかどうか知っています - 私は電話を受けています。彼らはなぜ彼らがエラーを受け取ったのか理解できるように、私はそれに有益な情報を与えたいと思う。 – Jeff

+0

だから、基本的には、どのように多くの在庫アイテムがcase_id 1を持っているかを確認するストアプロシージャを持っていると言っています - それが0より大きい場合、ユーザーに番号を表示してケース名を削除できないことを警告しますか? – Jeff

+0

確かに、マスターテーブルを安全に削除できるかどうかを知るためにもう一度 'COUNT()'を実行してください。私にも恐怖を感じるかもしれない "foreign key violated"の代わりに彼女に素晴らしい文章を教えてください。 – vulkanino

関連する問題