0

古いレガシーベースのシステムでは、ユーザーインベントリを更新します。在庫には多くの異なるアイテムが含まれ、ユーザーはアイテムIDごとに1つの行を持ち、各行にはユーザーが所有するこのアイテムの数量があります。

さて、このかなり古くて巨大なコードのどこかに問題があり、それによってユーザーはマイナスの量のアイテムになってしまう可能性があります。これは決して起こらないはずです。

問題に上からアプローチし、インベントリテーブルと相互作用するコードの各部分を調べるのではなく、問題を見つけるのに役立つレポートを作成しようと考えました。

この問題を解決できると思うものを実装する前に、コミュニティに公開して、彼らがどのようにアプローチするかを調べたいと思いました。

おそらく、更新時にMySQLルールを作成することから始めることができます。このルールは、詳細な検査などのために別のテーブルにアクティビティを挿入します。創造性を発揮してください。

4

1 に答える 1

1

タイムスタンプ フィールドを追加すると、最後の操作がいつ実行されたかがわかります。そこから、mysql ログで更新エントリを見つけて、アプリケーション ログと照合することができます。

または、テーブルにトリガーを設定することもできます...

CREATE TRIGGER no_negatives_in_yourtable
BEFORE UPDATE ON yourtable
FOR EACH ROW
BEGIN
  IF (NEW.value<0) THEN
     /* log it (NB will be rolled back if subsequent statement enabled */
     INSERT INTO badthings (....) VALUES (...);
     /* this forces the operation to fail */
     DROP TABLE `less than zero value in yourtable`;
  END IF;
END
于 2012-11-28T14:33:18.827 に答える