Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RDBアンチパターンと戦う - 削除フラグ 完全攻略ガイド / delete flag

Avatar for soudai sone soudai sone
February 12, 2024

RDBアンチパターンと戦う - 削除フラグ 完全攻略ガイド / delete flag

PHPカンファレンス関西の登壇資料です。
WEB+DB PRESS Vol.134に詳細があります
https://gihyo.jp/magazine/wdpress/archive/2023/vol134

Avatar for soudai sone

soudai sone

February 12, 2024
Tweet

More Decks by soudai sone

Other Decks in Technology

Transcript

  1. 自己紹介
 曽根 壮大(39歳)
 Have Fun Tech LLC 代表社員
 株式会社リンケージ CTO


    
 そ
 • 日本PostgreSQLユーザ会 勉強会分科会 担当
 • 3人の子供がいます(長女、次女、長男)
 • 技術的にはWeb/LL言語/RDBMSが好きです
 • コミュニティが好き たけ
 ね
 とも

  2. とりあえず削除フラグ id name created_at delete_flag 1 Taro 2023-03-10 12:00:00 false

    2 Hanako 2023-03-11 14:00:00 false 3 Jiro 2023-03-12 10:30:00 true 4 Yoko 2023-03-13 16:45:00 false 5 Ken 2023-03-14 09:15:00 true
  3. SELECT * FROM user -- customerをJOINして確認 INNER JOIN customer AS

    c ON user.id =c.user_id AND c.delete_flag = false WHERE user.delete_flag = false; 削除フラグがある場合に有効なユーザー を取得したいときのSQLは、SELECT * FROM user WHERE delete_flag = falseになります。 では、ユーザーに紐付く会社や組織にも削 除フラグがあった場合はどうでしょうか。   所属している会社が削除されているの にユーザーが取得できることはバグの温 床になり、たいへん危険です。 そのため、 次のSQLになります。 クエリが複雑になる
  4. とりあえず削除フラグ id name created_at delete_flag 1 Taro 2023-03-10 12:00:00 false

    ←削除されたユーザー 2 Taro 2023-03-11 14:00:00 true ←同名だがidが違うので別ユーザーの扱い 3 Jiro 2023-03-12 10:30:00 true 4 Yoko 2023-03-13 16:45:00 false 5 Ken 2023-03-14 09:15:00 true
OSZAR »