I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

إزاي تدير حذف البيانات في قواعد البيانات (Database)؟ الفرق بين الحذف النهائي والمؤقت

إزاي تدير حذف البيانات في قواعد البيانات (Database)؟ الفرق بين الحذف النهائي والمؤقت أكيد مريت بالموقف ده قبل كده: العميل بيكلمك في التليفون "يا هندسة، أنا مسحت

إزاي تدير حذف البيانات في قواعد البيانات (Database)؟ الفرق بين الحذف النهائي والمؤقت
Reading Count: 1

إزاي تدير حذف البيانات في قواعد البيانات (Database)؟ الفرق بين الحذف النهائي والمؤقت

أكيد مريت بالموقف ده قبل كده: العميل بيكلمك في التليفون "يا هندسة، أنا مسحت بيانات مهمة جداً بالخطأ، هل فيه أي طريقة نرجعها؟". هنا بتبدأ "الدراما" والبحث في الـ Backups، وفي الآخر ممكن نلاقي إننا مش قادرين نسترجع حاجة. طيب ليه بنحط نفسنا في الموقف ده؟ النهاردة هنتكلم عن الفرق بين الحذف النهائي (Hard Deletes) والحذف المؤقت (Soft Deletes) وإزاي تنفذهم في Laravel زي المحترفين.

يعني إيه Hard Delete؟

الحذف النهائي أو Hard Delete هو العملية التقليدية اللي بنعمل فيها DELETE FROM table WHERE id = 1. بمجرد ما الكود ده يتنفذ، الداتا بتتمسح من الـ Database للأبد ومفيش طريق رجعة. طبعاً ده بيوفر مساحة تخزين، لكنه خطر جداً في التطبيقات اللي فيها بيانات حساسة زي الفواتير أو حسابات المستخدمين.

إيه هو الـ Soft Delete وليه بنستخدمه؟

الـ Soft Delete هو استراتيجية بتخلينا نمسح البيانات "ظاهرياً" بس. بدل ما نشيل الصف من الجدول، بنضيف عمود جديد اسمه deleted_at. لما المستخدم يدوس مسح، الـ Framework بيحط تاريخ ووقت اللحظة دي في العمود ده، وبكده الـ Query العادي مش هيشوف البيانات دي، لكنها لسه موجودة في الـ Database ونقدر نرجعها في أي وقت بضغطة زرار.

تنفيذ الـ Soft Deletes في لارافيل (Laravel)

لارافيل بيسهل علينا الموضوع ده جداً. عشان تفعل الخاصية دي في أي Model، اتبع الخطوات دي:

1. إضافة عمود التوقيت للجدول:

Schema::table('users', function (Blueprint $table) {
    $table->softDeletes();
});

2. تجهيز الـ Model:

كل اللي عليك تعمله إنك تستخدم Trait اسمها SoftDeletes جوه الموديل بتاعك:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;
}

كده أي عملية حذف $user->delete() هتعمل تحديث لعمود deleted_at بدل الحذف، وأي User::all() هتجيب البيانات اللي مش ممسوحة بس. ولو حبيت تجيب الكل بما فيهم الممسوحين، بتستخدم User::withTrashed()->get().

متى تختار الـ Hard Delete؟

مش دايماً الـ Soft Delete هو الحل المثالي. في حالات معينة لازم تستخدم Hard Delete، زي:

  • بيانات مؤقتة زي الـ Logs أو الـ Cache اللي حجمها بيكبر بسرعة وبيملى الـ Disk Space.
  • بيانات مش مهمة ومش محتاجين نرجعها لأي سبب قانوني أو إداري.
  • جداول الـ Pivot في العلاقات المعقدة عشان ما تسببش تعارض في الـ Unique Constraints.

نصيحة من أخ لمبرمج محترف

نصيحتي ليك يا بطل، ما تبالغش في استخدام الـ Soft Deletes. كتر البيانات الممسوحة "ظاهرياً" بتقلل أداء الـ Database مع الوقت (بسبب الـ Index size). دايماً فكر في استراتيجية للـ Archiving، يعني مثلاً انقل البيانات الممسوحة من فترة طويلة لجدول تاني (Archive Table) أو امسحها نهائياً بعد مرور 30 يوم. التوازن هو سر الشطارة في الـ Software Architecture.


Share

Related posts

Jul 07, 2026 • 1 min read
Reading Count: 7
إدارة الحالة (State Management) بخفة: قوة متغيرات CSS في صفحات الهبوط

إدارة الحالة (State Management) بخفة: قوة متغيرات CSS في صفحات الهبوط أكيد مريت بالموقف ده: بتبني صف...

Jul 06, 2026 • 1 min read
Reading Count: 10
إزاي تبني Design System خاص بشركتك في فلاتر وتريح دماغك من وجع التعديلات؟

إزاي تبني Design System خاص بشركتك في فلاتر وتريح دماغك من وجع التعديلات؟ يا مساء الفل على كل المبرم...

Jul 06, 2026 • 1 min read
Reading Count: 10
تحسين محركات البحث في Next.js باستخدام الـ Dynamic Metadata

تحسين محركات البحث في Next.js باستخدام الـ Dynamic Metadata أكيد مريت بالموقف ده: كتبت مقال تحفة أو...