質問: $bag_id AND rental_from <= $rental_to AND rental_to >= $rental_from; if (empty($rental)) { INSERT INTO tbl_schedule (rental_id, bag_id, rental_from, rental_to) VALUES ($rental_id, $bag_id, $rental_from, $rantal_to); COMMIT; } else { print '既に同じ期間に別のレンタル予約が入っています。'; ROLLBACK; } ``` 上記3つの方法が思いついたのですが、他に良い方法がありましたらご教授いただけると助かります。 何卒よろしくお願い致します。
回答: 重複処理や不正データを避けたいのであれば、方法1がいいと思います。 特にサービスを管理するようなシステムでマルチスレッドで利用するなら、 そのレベルでロックをかけないと先勝ちだの後勝ちだの不都合が多いかと。 > > しかし、テーブル全体がロックされるため予約処理とは関係ない処理(管理画面など)にも影響がでる。 > > > これはむしろシステムの作りが悪い気がします。 重複を許さない予約処理とそれ以外の関係ない処理が同一のテーブルで管理されているのはのっぴきならない事情でもない限り良くないと思います。 OCPに則ってシステムを考えると方法1がベストなんじゃないかな、というのが私の考えですね。 レベルの高い開発者さんならもっといい解決方法があるのかもしれませんので、ご参考までに。