تخطَّ إلى المحتوى

الـ DB Schema: نمذجة البيانات بـ Prisma

الدرس 6 من 38

الهدف

بعد هالدرس تقدر تعرّف models في Prisma بـ relations صحيحة، تشغّل migration على Neon Postgres، وتكتب queries تجيب بيانات مستخدم محدد مع كل تفاصيله.

ليش هذا الحين؟

بنيت الـ auth — الحين عندك مستخدمين. بس مستخدمين بدون data ما فيهم فائدة. الـ database schema هو الـ blueprint اللي يحدد كيف تخزن كل شي. Schema غلط = refactoring مؤلم بعدين. Schema صح = queries بسيطة لسنوات.

الفكرة

الـ database schema هو تعريف شكل البيانات — جداول وأعمدة وعلاقات.

Prisma: ORM (Object-Relational Mapper) — بدل ما تكتب SQL مباشرة، تكتب TypeScript و Prisma يترجمه. يعطيك type safety كاملة — لو قلت prisma.habit.findMany() والـ habit مو موجود، TypeScript يشكي قبل ما تشغّل الكود.

Neon: Serverless Postgres — database في السحابة، تدفع بس على قد ما تستخدم. مثالي للـ side projects.

الـ models اللي نبنيها:

User → Habit → HabitLog

مستخدم واحد عنده عادات متعددة. كل عادة عندها logs يومية.

أنواع الـ relations في Prisma:

  • one-to-many: مستخدم واحد → عادات كثيرة
  • many-to-one: عادة → مستخدم واحد

مفاهيم مهمة:

  • @id — المعرّف الفريد
  • @default(cuid()) — يولّد ID عشوائي آمن
  • @unique — ما يتكرر في الجدول
  • @relation — يعرّف العلاقة بين الجداول
  • @default(now()) — يسجل وقت الإنشاء تلقائيا

الـ migration workflow:

تعديل schema.prisma
→ npx prisma migrate dev
→ Prisma يولّد SQL ويطبقه على الـ DB
→ npx prisma generate (يحدّث الـ TypeScript client)

محتاج مساعدة؟ راسلنا على mj@shakesbeard.net