1

私は、ColdFusionのエラーやバグを解決しようとする会社の人です。コールドフュージョンエラーなどの詳細が記載されたメールが毎日届き、この情報がデータベースに保存されます。

また、ColdFusionのいくつかの異なるアプリケーションでは、「PRIMARYKEY制約の違反」エラーが散発的に生成されているようです。

コードでは、挿入を試みる前にデータベース内の行の存在を常にチェックしますが、それでもそのエラーが生成されます。

したがって、私の考えでは、これらの各チェック、挿入、または更新ブロックの周りでcftransactionを実行する必要があります。しかし、これで本当に問題が解決するかどうかはわかりません。

これらは、標準のコールドフュージョンスタイル/フレームワークでコーディングされています。これが擬似コードの例です。

cfquery name = "check_sometable" datasource = "#dsn#" sometable/cfqueryからIDを選択

if check_sometable.recordcount gt 0 -do insert else -do update / endif

では、なぜこれが断続的に主キー違反を引き起こすのでしょうか?

これはSQLサーバーの問題ですか、構成オプションがありませんか?

新しいホットフィックスバージョンのcoldfusion8標準を使用していないため、これらすべてを取得していますか?

jdbc / odbcドライバーをアップグレードする必要がありますか?

ありがとうございました。

4

1 に答える 1

4

私には競合状態のように聞こえます。2つの接続が同時に次に使用可能なIDをチェックし、同じIDを取得すると、2番目の接続で挿入が失敗します。代理キーの場合、PKを作成するためにIDフィールドを使用しないのはなぜですか?

If you have a PK that is a natural key, then the violation is a good thing, you have two users trying to insert the same record which you do not want. I would try to fail it gracefully though, with an error that says someone else has created the same record. And then ask if they want to update it after loading the new values to their screen. I'm not sure I would want it to set up so that the data is automatically updated by the second person without them seeing what the first person put into the database.

さらに、これは、自然キーが思ったほどユニークではないことを示している可能性があります。このアプリケーションが何をするのかはわかりませんが、2人が同時に同じデータを操作したいと思う可能性はどのくらいありますか?したがって、自然キーが会社名のようなものである場合、それらが一意であるとは限らず、ユーザーが1つの会社の適切なデータを別の会社のデータで上書きする可能性があることに注意してください。私は人生の中で、本当にユニークで、決して変わらない自然キーはほとんどないことに気づきました。したがって、自然キーが実際に一意でない場合は、すでにデータが不良である可能性があり、PK違反は、実際の問題ではなく、別の問題の症状にすぎません。

于 2010-12-20T16:34:38.507 に答える