私は、MySQLクエリまたは機能を介して実行できることを知っている、実行する必要のあるほとんどのプロセスを常にPHPプログラミングに依存してきました。例えば:
MySQLにはデータの整合性を維持するのに役立つ外部キー機能があることは知っていますが、MySQLには依存していません。より柔軟なので、スクリプトにこれを行わせたほうがよいでしょう。私は基本的にMySQLをSTORAGEとして使用し、SCRIPTSをプロセッサとして使用しています。
私は物事をそのように保ちたいと思います、私のコーディングにほとんどの負荷をかけます。スクリプトが変更を加えるたびに競合や孤立した行などをチェックするために堅牢であることを確認し、これらすべてのデータ検証プロセスを実行するSYSTEM CHECKルーチンもあるので、スクリプト側ですべてを実行しようとしています。全体のパフォーマンスに大きな影響を与えないため(MySQLは内部でより高速に処理できることがわかっているので、もちろんMySQL COUNT()関数を使用します)。
もちろん、テーブルに直接変更を加えても、スクリプトのルーチンはトリガーされません。しかし、それは別の話です。私はこれを行うことにかなり満足しており、そうでないと確信するまでこれを続けるつもりです。
私が今本当に問題を抱えているのは、重複をチェックすることだけです。
私の現在のルーチンは、基本的にシリアル番号付きの製品を挿入することです。データベースに重複するシリアル番号が入力されていないことを確認する必要があります。
これを確認するためにMySQLUNIQUE制約に単純に依存するか、スクリプト側で実行できます。これが私が行ったことです。
この製品ルーチンはBATCHルーチンであり、スクリプトを1回呼び出すだけで、1から500の製品がデータベースに入力されます。
明らかに、送信されたデータとデータベースのデータの両方の重複エントリをチェックします。これが私のルーチンのチャンクです
for ($i = 1; $i <= $qty; $i++) {
//
$serial = $serials_array[$i - 1]; // -1 coz arrays start at zero
//check duplicates in submitted data ++++++++++++++++++++++++++
if($serial_check[$serial] == 1) { // duplicate found!
exit("stat=err&statMsg=Duplicate serial found in your entry! ($serial)");
}else{
$serial_check[$serial] = 1;
}
//check duplicates in database
if(db_checkRow("inventory_stocks", "WHERE serial='$serial'"))exit("stat=err&statMsg=Serial Number is already used. ($serial)");
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
OK、基本的には次のとおりです。
1)送信された各シリアル番号と照合できる配列を作成して、送信されたデータの重複を確認します。これは問題なく、最大1000レコードのPHPでも非常に高速です。
2)しかし、データベースの重複をチェックするには、作成した関数(db_checkRow)を呼び出す必要があります。w/ cは基本的に、送信された各シリアルに対してSELECTステートメントを発行し、ヒット/重複があるかどうかを確認します。
したがって、基本的に、重複をチェックするための500のSELECTステートメントと、MySQLの一意の制約機能だけです。
それは本当に重要ですか?
私がこのようにソフトウェアを設計するもう1つの理由は、少なくとも自分のものを別のデータベースにデプロイする必要がある場合、データベース機能にあまり依存しないため、わずかな調整でアプリケーションを簡単に移植できるためです。