إنتقل إلى المحتوى الرئيسي

تطوير قواعد البيانات باستخدام Cursor: SQL وORM وتكامل Prisma

Cursor Database Development

يعد تطوير قواعد البيانات جزءًا أساسيًا من هندسة البرمجيات الحديثة، ويمكن لقدرات الذكاء الاصطناعي في Cursor تسريع تصميم المخطط وكتابة الاستعلامات وتكامل ORM بشكل كبير. يغطي هذا الدليل سير العمل العملي لتحرير SQL وإعداد ORM والترحيلات وتحسين قواعد البيانات المستند إلى الذكاء الاصطناعي.

المتطلبات الأساسية​

قبل البدء، ستحتاج إلى:

  • تثبيت Cursor (الإصدار الأحدث موصى به)
  • خادم قاعدة بيانات يعمل محليًا أو عن بُعد (PostgreSQL أو MySQL أو SQLite)
  • تثبيت Node.js (لأدوات ORM)
  • فهم أساسي لـ SQL ومفاهيم قواعد البيانات

إعداد مشروع قاعدة البيانات في Cursor​

هيكل المشروع​

نظم ملفات قاعدة البيانات الخاصة بك بشكل منهجي لتحسين سياق الذكاء الاصطناعي:

project/
prisma/
schema.prisma # مخطط Prisma
migrations/ # ملفات الترحيل
src/
db/
connection.ts # اتصال قاعدة البيانات
queries/ # استعلامات SQL الأولية
repositories/ # طبقة الوصول إلى البيانات
scripts/
seed.ts # بذر قاعدة البيانات
docker-compose.yml # إعداد قاعدة البيانات المحلية

فتح المشروع في Cursor​

cd ~/my-database-project
cursor .

تحرير SQL باستخدام Cursor​

كتابة استعلامات معقدة​

Cursor ممتاز في إنشاء وتحسين SQL. استخدم مطالبات اللغة الطبيعية:

اكتب استعلام PostgreSQL للعثور على أفضل 5 عملاء حسب إجمالي قيمة الطلبات في آخر 30 يومًا.
يجب أن يتضمن الاسم والبريد الإلكتروني والإجمالي المنفق.

النتيجة التي أنشأها Cursor:

SELECT
c.id,
c.name,
c.email,
SUM(o.total_amount) AS total_spent
FROM customers c
JOIN orders o ON c.id = o.customer_id
WHERE o.created_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY c.id, c.name, c.email
ORDER BY total_spent DESC
LIMIT 5;

تحسين الاستعلامات​

الصق استعلامًا بطيئًا واطلب من Cursor تحسينه:

يستغرق هذا الاستعلام أكثر من 3 ثوانٍ على جدول يحتوي على مليون صف. حسّنه:
[الصق الاستعلام]

سيقترح Cursor الفهارس وإعادة كتابة الاستعلام ويشرح تحسينات الأداء.

دعم ملفات SQL​

يوفر Cursor تمييزًا للصياغة وIntelliSense لملفات .sql:

  1. أنشئ ملف .sql
  2. يقوم Cursor بتفعيل وضع لغة SQL تلقائيًا
  3. استخدم Ctrl+Space للإكمال التلقائي لأسماء الجداول والأعمدة
نصيحة الخبير

قم بتخزين أنماط الاستعلام القابلة لإعادة الاستخدام في ملفات .sql. يقوم Cursor بفهرسة هذه الملفات ويمكنه الرجوع إليها عند إنشاء استعلامات جديدة.

تكامل Prisma​

إعداد Prisma​

قم بتهيئة Prisma في مشروعك:

npm install prisma @prisma/client
npx prisma init

تصميم المخطط بالذكاء الاصطناعي​

صف نموذج بياناتك بلغة طبيعية:

صمم مخطط Prisma لتطبيق للتجارة الإلكترونية يتضمن:
- المستخدمون (الأدوار: المشرف والعميل والبائع)
- المنتجات (الفئات وتتبع المخزون)
- الطلبات (الحالة وتفاصيل الشحن)
- المراجعات (مرتبطة بالمنتجات والمستخدمين)

النتيجة التي أنشأها Cursor:

model User {
id Int @id @default(autoincrement())
email String @unique
name String
role Role @default(CUSTOMER)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt

orders Order[]
reviews Review[]
}

enum Role {
ADMIN
CUSTOMER
SELLER
}

model Product {
id Int @id @default(autoincrement())
name String
description String?
price Decimal @db.Decimal(10, 2)
inventory Int @default(0)
categoryId Int

category Category @relation(fields: [categoryId], references: [id])
reviews Review[]
orderItems OrderItem[]
}

model Category {
id Int @id @default(autoincrement())
name String @unique
products Product[]
}

model Order {
id Int @id @default(autoincrement())
status OrderStatus @default(PENDING)
total Decimal @db.Decimal(10, 2)
createdAt DateTime @default(now())
userId Int

user User @relation(fields: [userId], references: [id])
orderItems OrderItem[]
}

enum OrderStatus {
PENDING
PROCESSING
SHIPPED
DELIVERED
CANCELLED
}

model OrderItem {
id Int @id @default(autoincrement())
quantity Int
unitPrice Decimal @db.Decimal(10, 2)
orderId Int
productId Int

order Order @relation(fields: [orderId], references: [id])
product Product @relation(fields: [productId], references: [id])
}

model Review {
id Int @id @default(autoincrement())
rating Int
comment String?
createdAt DateTime @default(now())
userId Int
productId Int

user User @relation(fields: [userId], references: [id])
product Product @relation(fields: [productId], references: [id])

@@unique([userId, productId])
}

إنشاء الترحيلات​

بعد تغيير المخطط، قم بإنشاء الترحيلات وتطبيقها:

npx prisma migrate dev --name add_user_roles

استخدم Cursor لمراجعة ملفات الترحيل قبل تطبيقها:

راجع ملف الترحيل هذا بحثًا عن فقدان البيانات المحتمل أو المشاكل:
[الصق محتوى migration.sql]

استعلامات Prisma Client​

أنشئ استعلامات مكتوبة بأمان بمساعدة الذكاء الاصطناعي:

اكتب استعلام Prisma لجلب جميع طلبات المستخدم مع تفاصيل المنتجات
const userOrders = await prisma.order.findMany({
where: { userId: 1 },
include: {
orderItems: {
include: {
product: {
select: {
name: true,
price: true,
},
},
},
},
},
orderBy: {
createdAt: 'desc',
},
});

سير العمل مع TypeORM وSequelize​

إعداد TypeORM​

// src/db/data-source.ts
import { DataSource } from 'typeorm';
import { User } from './entities/User';
import { Order } from './entities/Order';

export const AppDataSource = new DataSource({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'user',
password: 'password',
database: 'myapp',
synchronize: false,
logging: true,
entities: [User, Order],
migrations: ['src/migrations/*.ts'],
});

نماذج Sequelize​

// src/models/User.js
const { DataTypes } = require('sequelize');

module.exports = (sequelize) => {
const User = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true,
},
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
}, {
tableName: 'users',
timestamps: true,
});

return User;
};

تصور مخطط قاعدة البيانات​

استخدام Prisma ERD​

أنشئ مخطط علاقة الكيانات:

npx prisma generate --generator erd

أو اطلب من Cursor إنشاء مخطط مرئي:

أنشئ مخطط ERD Mermaid لمخطط Prisma لهذا المشروع

تحسين الاستعلامات بالذكاء الاصطناعي​

تحليل أداء الاستعلامات​

شارك استعلامك وخطة التنفيذ:

يستخدم هذا الاستعلام فحصًا تسلسليًا. كيف يمكنني تحسينه بإضافة فهارس؟

EXPLAIN ANALYZE SELECT * FROM orders WHERE status = 'pending' AND created_at > '2024-01-01';

سيقترح Cursor:

CREATE INDEX idx_orders_status_created_at ON orders(status, created_at);

مراجعة تصميم قاعدة البيانات​

اطلب من Cursor تدقيق مخططك بحثًا عن أفضل الممارسات:

راجع مخطط قاعدة البيانات هذا من حيث:
1. مشاكل التطبيع
2. الفهارس المفقودة في المفاتيح الخارجية
3. تحسين أنواع البيانات
4. مشاكل التزامن المحتملة

Docker Compose للتطوير المحلي​

version: '3.8'
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: devpass
POSTGRES_DB: myapp
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data

mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: myapp
MYSQL_USER: dev
MYSQL_PASSWORD: devpass
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql

volumes:
postgres_data:
mysql_data:

المهام الشائعة لقواعد البيانات​

المهمةمثال مطالبة Cursor
إنشاء ترحيل"أنشئ ترحيلاً لإضافة عمود حذف منطقي إلى جدول المستخدمين"
بيانات الـ seed"اكتب سكربت seed لملء قاعدة البيانات بـ 100 مستخدم اختباري"
نسخ احتياطي"اكتب أمر pg_dump لنسخ جداول المستخدمين والطلبات فقط"
تجمع الاتصالات"قم بتكوين تجمع الاتصالات لتطبيق Node.js مع 100 مستخدم متزامن"
تدقيق السجل"أضف جدول سجل تدقيق لتتبع جميع التغييرات في جدول الطلبات"

تصحيح مشاكل قواعد البيانات​

مشاكل الاتصال​

لا يمكن لـ Prisma Client الاتصال بـ PostgreSQL. سلسلة الاتصال والخطأ هما:
[الصق الخطأ]

فشل الترحيلات​

عندما تفشل الترحيلات:

  1. تحقق من حالة الترحيل:
npx prisma migrate status
  1. اطلب من Cursor تحليل الفشل واقتراح إصلاحات

  2. حل التعارضات وعلّمها كمُطبَّقة إذا لزم الأمر:

npx prisma migrate resolve --applied migration_name

أفضل الممارسات​

الأمان​

  • لا تقم أبدًا بتخزين بيانات اعتماد قاعدة البيانات في التحكم بالإصدار
  • استخدم متغيرات البيئة لسلاسل الاتصال
  • قم بتمكين SSL لاتصالات الإنتاج
  • استخدم استعلامات معلمة لتجنب حقن SQL

الأداء​

  • أضف فهارس على الأعمدة التي يتم الاستعلام عنها بشكل متكرر
  • استخدم تجمع الاتصالات في الإنتاج
  • نفذ تخزين نتائج الاستعلام مؤقتًا لأعباء العمل المكثفة للقراءة
  • راقب سجلات الاستعلامات البطيئة

التحكم بالإصدار​

# Database
*.db
*.sqlite
*.sqlite3
.env
.env.local
prisma/migrations/migration_lock.toml

مرجع سريع​

المهمةالأمر
إنشاء Prisma Clientnpx prisma generate
تشغيل الترحيلnpx prisma migrate dev
إعادة تعيين قاعدة البياناتnpx prisma migrate reset
فتح Prisma Studionpx prisma studio
بذر قاعدة البياناتnpx prisma db seed
تنسيق المخططnpx prisma format

موارد ذات صلة​

آخر تحديث: يوليو 2025