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: 51

إزاي تدير حذف البيانات في قواعد البيانات (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

Aug 21, 2026 • 1 min read
Reading Count: 2
الـ Attributes في PHP 8: بديل قوي للـ PHPDoc Annotations

يا هلا بيك يا بشمهندس! لو انت شغال تطوير مواقع الويب (Web Development) بلغة بي إتش بي (PHP) ، أكيد ف...

Aug 21, 2026 • 1 min read
Reading Count: 5
شرح ميزات PHP 8.1: قوة الـ Enums في الكود النظيف وتجنب الأخطاء

شرح ميزات PHP 8.1: قوة الـ Enums في الكود النظيف وتجنب الأخطاء يا هلا بيك يا بشمهندس في عالم البرمجة...

Aug 20, 2026 • 1 min read
Reading Count: 9
استخدام الـ Macros في Laravel لإضافة دوال جديدة للكلاسات

ازاي تضيف دوال جديدة لكلاسات لارافيل الأساسية من غير ما تكسر الكود؟ استخدام الـ Macros في لارافيل (L...