تهيئة قاعدة البيانات وتجميع الاتصالات
املأ قاعدة بياناتك ببيانات تهيئة موثوقة، واضبط تجميع اتصالات Prisma ليظل تطبيق Next.js سريعًا ومستقرًا تحت الضغط.
تهيئة قاعدة البيانات وتجميع الاتصالات درس مجاني في Next.js 15 Fullstack (App Router + Server Actions) على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Next.js 15 Fullstack (App Router + Server Actions)، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Next.js 15 Fullstack (App Router + Server Actions) 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
Why Seed a Database?
Seeding fills your database with predictable starter data: admin users, demo records, lookup tables. It lets every developer and every CI run start from the same known state.
Without seeds, manual data entry makes tests flaky and onboarding slow.
The Prisma Seed Script
Prisma runs a seed file you point it at. Create prisma/seed.ts and register it in package.json under the prisma.seed key so prisma db seed knows what to execute.
{
"prisma": {
"seed": "ts-node prisma/seed.ts"
}
}Writing Seed Logic
Inside the seed file you instantiate the client and create records. Wrap it in an async function and disconnect when finished.
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
await prisma.user.create({
data: { email: 'admin@app.com', name: 'Admin' }
});
}
main().finally(() => prisma.$disconnect());Idempotent Seeds with upsert
Running a seed twice should not create duplicates. Use upsert so a record is created if missing and updated if it already exists.
await prisma.user.upsert({
where: { email: 'admin@app.com' },
update: {},
create: { email: 'admin@app.com', name: 'Admin' }
});Bulk Seeding
To insert many rows efficiently, use createMany. The skipDuplicates option avoids errors on unique conflicts.
await prisma.tag.createMany({
data: [
{ name: 'news' },
{ name: 'sports' },
{ name: 'tech' }
],
skipDuplicates: true
});Running the Seed
Trigger the script from the CLI. Prisma also runs it automatically after prisma migrate reset, giving you a clean reseeded database.
npx prisma db seedThe Connection Problem in Serverless
Next.js on Vercel runs serverless functions. Each invocation can open a fresh DB connection, and under load you quickly exhaust the database connection limit.
Connection pooling solves this by reusing a fixed set of connections.
Reusing the Prisma Client
In development, hot reload can spawn many clients. Store a single instance on globalThis so only one client exists per process.
import { PrismaClient } from '@prisma/client';
const g = globalThis as unknown as { prisma?: PrismaClient };
export const prisma = g.prisma ?? new PrismaClient();
if (process.env.NODE_ENV !== 'production') g.prisma = prisma;Pooling with a Connection URL
Use a pooler such as PgBouncer or Prisma Accelerate. Point your DATABASE_URL at the pooled endpoint and add ?pgbouncer=true so Prisma disables prepared statements that PgBouncer cannot share.
DATABASE_URL="postgresql://user:pass@host:6543/db?pgbouncer=true&connection_limit=1"Direct URL for Migrations
Pooled connections cannot run migrations. Add a directUrl in your schema that bypasses the pooler so prisma migrate works.
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}Best Practices
Keep your data layer healthy:
- Make seeds idempotent with upsert
- Reuse a single client instance
- Use a pooler in serverless environments
- Keep a separate direct URL for migrations
Quick Check
Test what you learned about pooling.
Recap
You learned to seed and pool your database:
- Configure
prisma.seedand write idempotent seeds withupsert - Bulk insert with
createMany - Reuse a single Prisma client to avoid leaks
- Use a pooled
DATABASE_URLplus adirectUrlfor migrations
Now your database starts in a known state and scales safely.
الأسئلة الشائعة
هل درس «تهيئة قاعدة البيانات وتجميع الاتصالات» مجاني؟
نعم — نص درس «تهيئة قاعدة البيانات وتجميع الاتصالات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Next.js 15 Fullstack (App Router + Server Actions)، انتقل إلى CoddyKit PRO. تتضمن دورة Next.js 15 Fullstack (App Router + Server Actions) 4 دروس في المجموع.
ماذا ستتعلم في «تهيئة قاعدة البيانات وتجميع الاتصالات»؟
املأ قاعدة بياناتك ببيانات تهيئة موثوقة، واضبط تجميع اتصالات Prisma ليظل تطبيق Next.js سريعًا ومستقرًا تحت الضغط. تتمرن على Next.js 15 Fullstack (App Router + Server Actions) مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Next.js 15 Fullstack (App Router + Server Actions)؟
لا تُشترط خبرة سابقة. Next.js 15 Fullstack (App Router + Server Actions) على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «تهيئة قاعدة البيانات وتجميع الاتصالات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Next.js 15 Fullstack (App Router + Server Actions) هذا؟
نعم. كل درس في Next.js 15 Fullstack (App Router + Server Actions) يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد Prisma ORM
- عمليات CRUD باستخدام Server Actions
- ترحيلات مخطط قاعدة البيانات
- تهيئة قاعدة البيانات وتجميع الاتصالات