ORM لجافا سكريبت (Node.js): مقارنة بين Sequelize و TypeORM و Prisma

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ORM لجافا سكريبت (Node.js): مقارنة وأمثلة



عند تطوير تطبيقات الخادم باستخدام Node.js، يعد التفاعل مع قاعدة البيانات إحدى المهام الرئيسية. يسمح تعيين الكائنات العلائقية (ORM) بالعمل مع قواعد البيانات العلائقية من خلال كائنات جافا سكريبت، مما يلغي الحاجة إلى كتابة SQL خالص. في هذه المقالة، سنناقش ثلاث ORM شائعة: Sequelize و TypeORM و Prisma، ونقارن ميزاتها ونقدم أمثلة عملية.



1. Sequelize



Sequelize هي واحدة من أقدم وأكثر ORM نضجًا لـ Node.js. تدعم PostgreSQL و MySQL و MariaDB و SQLite و MSSQL. تعمل مع Promises و async/await.



التثبيت والإعداد

npm install sequelize sequelize-clinpm install pg pg-hstore # لـ PostgreSQL


مثال على النموذج والاستعلامات

const { Sequelize, DataTypes } = require('sequelize');const sequelize = new Sequelize('postgres://user:pass@localhost:5432/mydb');

// تعريف النموذجconst User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, email: { type: DataTypes.STRING, unique: true }});

// إنشاء سجلconst user = await User.create({ name: 'إيفان', email: 'ivan@example.com' });

// بحث مع فلترconst users = await User.findAll({ where: { name: 'إيفان' } });

// تحديثawait User.update({ email: 'new@example.com' }, { where: { id: 1 } });


الإيجابيات والسلبيات

  • + مجتمع كبير، الكثير من الوثائق
  • + دعم الترحيل (migrations) والبذور (seeds)
  • - بناء جملة ضخم للاستعلامات المعقدة
  • - لا يوجد دعم مدمج لـ TypeScript


2. TypeORM



TypeORM هي ORM موجهة نحو TypeScript، ولكنها تعمل أيضًا مع جافا سكريبت العادي. تدعم الديكورات (decorators) و Active Record و Data Mapper. تعمل مع معظم أنظمة إدارة قواعد البيانات الشائعة.



التثبيت والإعداد

npm install typeorm reflect-metadatanpm install pg # لـ PostgreSQL


مثال على النموذج مع الديكورات

import { Entity, PrimaryGeneratedColumn, Column, createConnection } from 'typeorm';

@Entity()export class User { @PrimaryGeneratedColumn() id: number;

@Column() name: string;

@Column({ unique: true }) email: string;}

// الاستخدامconst connection = await createConnection();const userRepo = connection.getRepository(User);const user = await userRepo.save({ name: 'آنا', email: 'anna@example.com' });const users = await userRepo.find({ where: { name: 'آنا' } });


الإيجابيات والسلبيات

  • + دعم ممتاز لـ TypeScript
  • + نهجان: Active Record و Data Mapper
  • - تكوين معقد للمبتدئين
  • - ترحيل بطيء في المشاريع الكبيرة


3. Prisma



Prisma هي ORM حديثة تستخدم لغة مخطط خاصة بها وتنشئ عميلًا آمنًا من حيث النوع. تعتبر الأكثر أداءً وراحة للمطورين.



التثبيت والإعداد

npm install @prisma/clientnpx prisma init


تعريف المخطط (schema.prisma)

model User {  id    Int     @id @default(autoincrement())  name  String  email String @unique}


مثال على الاستعلامات

import { PrismaClient } from '@prisma/client';const prisma = new PrismaClient();

// إنشاءconst user = await prisma.user.create({ data: { name: 'أولغا', email: 'olga@example.com' }});

// بحثconst users = await prisma.user.findMany({ where: { name: 'أولغا' } });

// تحديثawait prisma.user.update({ where: { id: 1 }, data: { email: 'new@example.com' }});


الإيجابيات والسلبيات

  • + أمان كامل من حيث النوع

توصيات