- بواسطة x32x01 ||
سؤال انترفيو: ليه بنستخدم Database Transactions؟ 🤔💾
من أكتر أسئلة الانترفيو اللي بتيجي لأي Backend Developer 👇ليه بنستخدم Database Transactions؟
الإجابة المختصرة: عشان نحافظ على سلامة وتكامل البيانات (Data Integrity) خصوصًا في العمليات اللي فيها أكتر من خطوة.
يعني إيه Transaction ببساطة؟ 🧠
الـ Transaction معناها: مجموعة أوامر في قاعدة البيانات يا إمّا تنجح كلها… يا إمّا تفشل كلها ❗ مفيش حل وسط.📌 فكّر فيها كده: زرار Save واحد يضبط كل حاجة أو يلغي كل حاجة.
مثال عملي: تحويل رصيد بين حسابين 💰
أوضح مثال دايمًا في الانترفيو 👇عندك:
- مستخدم (A)
- مستخدم (B)
- تخصم 100 جنيه من (A)
- وتضيفهم لـ (B)
- اتخصم المبلغ من (A)
- السيستم وقع قبل ما يضيف لـ (B)
دور الـ Transaction هنا 🔒
الـ Transaction بتقول:- يا تنفذ العمليتين مع بعض
- يا تلغي الاتنين لو واحدة فشلت
ومفيش إضافة من غير خصم
استخدام Transactions في Laravel بسهولة 🚀
Laravel مريح جدًا في النقطة دي.مثال بسيط باستخدام DB::transaction:
PHP:
DB::transaction(function () {
DB::table('users')
->where('id', 1)
->decrement('balance', 100);
DB::table('users')
->where('id', 2)
->increment('balance', 100);
}); ❌ لو أي حاجة فشلت → Rollback تلقائي
إمتى أحتاج تحكم يدوي في Transaction؟ 🛠️
في العمليات المعقدة شوية:- شروط كتير
- Try / Catch
- أكتر من خطوة Logic
مثال:
PHP:
DB::beginTransaction();
try {
DB::table('users')->where('id', 1)->decrement('balance', 100);
DB::table('users')->where('id', 2)->increment('balance', 100);
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
} - إمتى تعمل Commit
- وإمتى تعمل Rollback
استخدامات Transactions غير الفلوس 💡
مش بس تحويل رصيد، كمان:- إنشاء Order + Order Items
- تسجيل مستخدم + Profile
- حجز منتج + تقليل المخزون
- أي عملية مترابطة
ليه السؤال ده مهم في الانترفيو؟ 🎯
لأنه يوضح:- فهمك للـ Database
- وعيك بالمخاطر
- تفكيرك في الـ Edge Cases
- احترافيتك في كتابة Backend Code
الخلاصة 👇🔥
🔹 Database Transactions بتحمي البيانات🔹 بتمنع الأخطاء الكارثية
🔹 ضرورية لأي نظام حقيقي
لو فاهمها كويس؟ ✔ هتكتب كود أنضف ✔ هتنجح في الانترفيو ✔ وهتتجنب مشاكل ملهاش حل