MySQL(Aurora) + PHP7 で簡単なwebアプリを作っています。
商品テーブル item
が存在するのですが、今回そこに削除フラグとして以下のように deleted
という列を追加することになりました。
ALTER TABLE item ADD deleted TINYINT UNSIGNED DEFAULT 0 -- 0:有効, 1:削除済
ここまでは何の問題もないのですが、この商品テーブルを参照するSQLがソース内に既に500以上存在します。(ORMやビューは未使用です)
ほとんどのケースにおいて、削除済み商品については基本的に処理をさせたくないため、原則的には WHERE deleted = 0
をSQLに追加していけばよいのですが、現時点で item
テーブルにアクセスするSQLが各ソース内に合計で500以上存在します。
流石にこれらのSQLに対して1つ1つ WHERE条件を追加していくのは無駄な気がしてならないのですが、95%以上のSQLで deleted = 0
のみのデータを対象とすることから、「WHERE句に何も指定していない場合は deleted = 0
として扱われ、明示的に削除済みの商品も扱いたい場合は deleted = 1
ないし deleted IN (0,1)
のように指定することで扱える」ようにするために、何か良い方法はないでしょうか?
なお、現時点では削除済みの商品はないものの、今後削除済みになる可能性はあるという状態です。
また、単純なSELECTのみでなく、UPDATE/INSERTやJOIN、サブクエリ等にも使用しています。
書き換え漏れや再テストの手間を考えて、既存のSQLやPHPソースの書き換えを最小限にできればと考えています。
最初からビューにしておけばいくらか手間が減った気はするのですが、今からSQLの参照先を全てビューに変更するのもどうかと思っています。
こういうケースは結構ありそうな気がするのですが、自分で検索しても良い検索結果が得られなかったため、妙案があればアドバイスいただければ幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/01 08:55