【Rails】物理削除 vs 論理削除
物理削除(Physical Deletion)とは
物理削除は、データベースから対象のデータを完全に削除する方法。
削除されたデータはデータベースから完全に消去され、元に戻すことができない。物理削除はデータベースの容量を減らすことができるため、一部のデータが不要となった場合には有効的。
-
具体例:ウェブアプリケーションのユーザーデータの場合
物理削除すると、退会したユーザーのアカウント情報が完全にデータベースから削除される。その結果、退会したユーザーの情報はデータベース上に存在しなくなる。 -
コード例:
class CustomersController < ApplicationController
def destroy
@customer = Customer.find(params[:id])
@customer.destroy
redirect_to customers_path, notice: "顧客情報を削除しました。"
end
end
論理削除(Logical Deletion)とは
論理削除は、データベース内のデータを物理的には削除せずに、削除を表すための方法。 削除を表すためのフラグ(例えば、真偽値でtrue
やfalse
など)をデータベースのテーブル追加する。このフラグによって、削除されたデータは非表示になり、ユーザーには見えなくなるが、実際にはデータベースに保管されたままとなる。
- 具体例:ウェブアプリケーションのユーザーデータの場合
論理削除をする場合、退会したユーザーのアカウント情報は削除フラグを立てることで、一般ユーザーからは非表示となるが、データベース上には存在し続ける。管理画面などで復元操作をすることで、退会後のユーザー情報を再度表示することができる。
論理削除は、データの誤削除を防止する、データの履歴を保持する、個人情報の取り扱いに対応するなどの目的で使われることがある。
- コード例:
create_table :customers do |t|
# 他のフィールド定義...
t.boolean :is_deleted, default: false, null: false
t.timestamps
end
class Customer < ApplicationRecord
def customer_status
if is_deleted == true
"退会"
else
"有効"
end
end
end
このModelでは、is_deleted
というboolean型のフィールドがある。これは論理削除を表し、顧客が退会した場合はis_deleted
がtrueになる。customer_status
メソッドは、is_deleted
がtrueの場合は"退会"、falseの場合は"有効"を返す。
<%= form_with(model: @customer, local: true) do |f| %>
<!-- 他のフォームフィールドは省略 -->
<%= f.radio_button :is_deleted, :false %>
<%= f.label :is_deleted, "有効", value: :false %>
<%= f.radio_button :is_deleted, :true %>
<%= f.label :is_deleted, "退会", value: :true %>
<%= f.submit %>
<% end %>
このViewでは、フォームを使ってis_deleted
フィールドを編集できるようにしている。radio_button
を使用して、"有効"と"退会"の2つのラジオボタンを作成し、顧客のステータスを選択できる。
class CustomersController < ApplicationController
# 他のアクションは省略
def update
@customer = Customer.find(params[:id])
if @customer.update(customer_params)
redirect_to @customer, notice: "顧客情報を更新しました。"
else
render :edit
end
end
private
def customer_params
params.require(:customer).permit(:is_deleted, :other_fields)
end
end
このControllerでは、updateアクションを使って顧客情報を更新している。customer_params
メソッドで許可されたパラメータを指定し、is_deleted
フィールドを更新できるようにしている。
まとめ
データの重要性が低く、復元や削除履歴が必要ない場合は物理削除を使い、重要なデータや復元が必要な場合は論理削除を使う!
チーム開発、いよいよデザインの実装に入りました!みんなでイメージを話し、デザインを整えていくのはとても楽しい♪
Discussion