28.4K Views
June 16, 24
スライド概要
Ruby/Javaプログラマー。エンジニアリングマネージャー。 軽度の広く浅いオタク。
TORANOANA Lab 物理削除 vs 論理削除 レコード消滅作戦 虎の穴ラボ 河野 裕隆 JJUG CCC 2024 Spring Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
自己紹介 河野 裕隆(こうの ひろたか) 好きなもの ● 2019/08 虎の穴ラボ入社 ● VOCALOID(初音ミク) ● 新規開発チーム ● 謎解き、クイズ ○ ● クリエイティア他 X: @hk_it7 虎の穴ラボへの入社理由 ● スキルを高めあえる仲間がほしい ● ユーザーに近い仕事がしたい JJUG CCC登壇は半年ぶり3回目 初めてスタッフ参加🎉 2 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
アイスブレイクタイム 3 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
おはようございます!! 4 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
質問です! 5 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
『ゴジラ×メガギラス G消滅作戦』 見たことある人 6 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
交流会で話ましょう!!!! 7 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
今回このタイトルにして、 ちょっと恥ずかしくなっています...... 8 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
話さないこと ● Javaのこと! ○ JJUG CCCなのに...... ● 組み込みでのこと! ● この世の真理のこと! ○ どんなケースでも対応できるベストプラク ティスを授けるわけではないです! 9 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
話すこと ● 物理削除とは ● 論理削除とは ● 各陣営の主張 ● 大まかな選定基準 10 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
対象者 ● Beginnerセッション ○ 初学者~を対象としています ● なんとなくでDB設計している人 ○ DB設計する際の私見を共有します 11 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
オススメの聞き方(余談) ● 自分の考えと異なるところを見つける ○ その理由を考える ● 理解できなかったところをまとめる ○ 質問する ■ 交流会でも廊下で捕まえてもらっても 12 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
レコードは物理削除すべき? 13 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
論理削除のほうが良い? 14 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
前提条件なく話せない!! 15 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
SNSの文量では 前提条件を説明しきれない!! 16 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
メリット・デメリットを精査して 選択できるようにしよう!! 17 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
話すこと ● 物理削除とは ● 論理削除とは ● 各陣営の主張 ● 大まかな選定基準 18 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
話すこと ● 物理削除とは ● 論理削除とは ● 各陣営の主張 ● 大まかな選定基準 19 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
の前に...... なぜ削除するのか? 20 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
削除する理由 ● 不要だから(ex: バナナの皮) ● 見せちゃいけないから(ex: 自分宛ての封筒) ○ シュレッダーで削除 ● 増えすぎるから(ex: 昨日の新聞) etc. 21 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
システムの世界でも さまざまな理由で”削除”する 22 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
削除方法には大きくわけて2つある 23 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
① ゴミとして出す=手元から消える 物理削除 24 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
② 目に見えないところに移動=手元に残る 論理削除 25 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
話すこと ● 物理削除とは ● 論理削除とは ● 各陣営の主張 ● 大まかな選定基準 26 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
物理削除とは DBに入ったデータを削除すること <=>論理削除 基本的に復旧/再度閲覧の手段がない 27 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
話すこと ● 物理削除とは ● 論理削除とは ● 各陣営の主張 ● 大まかな選定基準 28 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
論理削除とは DBに入ったデータのステータス等を更新し削除さ れたものと扱うこと 復旧/再度閲覧が可能 29 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
論理削除の種類 ● 削除フラグ(さっきの例) ● 削除日時 ● ステータス ● 削除/有効状態テーブル ● その他 30 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
削除日時を使った論理削除-NULLを利用 削除されたら、その日時を入れる メリット:削除された日時がわかる デメリット:NULL許可で、ぬるぽの可能性 31 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
削除日時を使った論理削除-NULLを避ける デメリット:NULL許可で、ぬるぽの可能性 =>DEFAULT値を「9999-12-31」で解決可能? 検索は未来日にしておけば良い 32 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
ステータス 削除されたら、ステータスを「削除状態」にする メリット:カラムが増えない デメリット:同列で扱うべきか悩む 33 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
削除/有効状態テーブルを結合 削除/有効状態テーブルの有無で状態を判断 メリット:検索効率がよくなる可能性がある デメリット:検索がしんどい ※削除状態テーブルを作成する例 34 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
削除/有効状態テーブルを結合 有効状態テーブルの有用性 - 削除時に消さないといけない情報をまとめる =>実質物理削除と同じメリットを得られる - 外部キー制約を維持できる 35 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
その他 ● アーカイブに逃がしたうえで物理削除 ○ トランザクション管理が必要 ○ 結局レコード残る ● マスキングしてしまう ○ 削除フラグ等で論理削除した上で利用 ○ 個人情報を意味のない値で上書き 36 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
話すこと ● 物理削除とは ● 論理削除とは ● 各陣営の主張 ● 大まかな選定基準 37 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
各陣営の主張 - 物理削除派 物理削除のメリット ● 情報流出の危険がない! ● 検索時に条件の追加が不要 ● 検索時にレコード数が減る 38 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
各陣営の主張 - 論理削除派 論理削除のメリット ● 簡単に巻き戻せる ● 外部キー制約に引っかかることもない 39 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
話すこと ● 物理削除とは ● 論理削除とは ● 各陣営の主張 ● 大まかな選定基準 40 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
おおまかな選定基準 41 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
おおまかな選定基準 ● まずは物理削除できないか検討する ○ 取り返しのつかない要素なので慎重に...... ● リレーション関係に注意⚠ ● 残したいデータと消す必要のあるデータでわけ ておくと良い =>有効/無効テーブルで仕分けられるかも 42 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
伝えたいこと ● 削除方法(物理/論理削除)はどのようにの話 ● 設計時に大切なのは、「なぜ」/「どうして」 削除するのか 43 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
要件定義/設計では 「なぜ、どうして」と「どのように」を 切り分けることが重要!! 44 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
考え方 ● 要件:なぜ、どうして ● 設計:どのように 設計理由が要件の「なぜ」、「どうして」を満た しているか考える 45 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
サンプル ● 仕様:ユーザー退会時に個人情報を削除する ○ なぜ? ■ プライバシーポリシーで定めているから ● 設計:ユーザー退会はユーザーテーブルのレ コード物理削除にて行う ↑プライバシーポリシーに従うための設計 46 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
まとめ ● 「なぜ」/「どうして」に着目、DB設計しよう 47 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c
宣伝 ● 今回の内容含めて技術同人誌出してます! 技術書典 サークル名:世迷言ラボ 電子のみ、500円 https://techbookfest.org/product/fYKMyCU1sJFBMrcBG TCeXb?productVariantID=iu3uRVDhX5ct79p9KYdu2w 48 Copyright (C) 2024 Toranoana Lab Inc. All Rights Reserved. #jjug_ccc_c