ترحيلات قواعد البيانات في Swift: الأدوات والمناهج لنظامي iOS/macOS

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

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

ابدأ الدورة

ترحيلات قواعد البيانات في Swift (iOS/macOS): نظرة عامة على الأدوات والأمثلة

\n\n

ترحيلات قواعد البيانات هي عملية تغيير مخطط البيانات (الجداول، الفهارس، العلاقات) بطريقة محكومة دون فقدان المعلومات الموجودة بالفعل. في نظام Swift البيئي لمنصات Apple (iOS، macOS، watchOS، tvOS)، يستخدم المطورون عدة مناهج: من Core Data المدمج إلى المكتبات الخارجية مثل GRDB.swift و Fluent. في هذه المقالة، سنشرح الأدوات الرئيسية وإمكانياتها ونقدم أمثلة عملية على الكود.

\n\n

1. Core Data والترحيلات (الخفيفة واليدوية)

\n\n

Core Data هو إطار عمل Apple القياسي للعمل مع النموذج الكائني. تنقسم الترحيلات إلى نوعين:

\n
    \n
  • الترحيل الخفيف (Lightweight Migration) — تلقائي، إذا كانت التغييرات لا تتضمن تحويلات معقدة (إضافة سمات، حذف، إعادة تسمية مع نموذج تعيين).
  • \n
  • الترحيل اليدوي (Manual Migration) — مطلوب عندما تحتاج إلى تغيير أنواع البيانات، دمج الكيانات أو إجراء تحويلات مخصصة.
  • \n
\n\n

مثال على إعداد الترحيل الخفيف في Swift:

\n
import CoreData\n\nlazy var persistentContainer: NSPersistentContainer = {\n    let container = NSPersistentContainer(name: "MyDataModel")\n    let description = container.persistentStoreDescriptions.first\n    description?.shouldMigrateStoreAutomatically = true\n    description?.shouldInferMappingModelAutomatically = true\n    container.loadPersistentStores { _, error in\n        if let error = error {\n            fatalError("خطأ في تحميل Core Data: \\(error)")\n        }\n    }\n    return container\n}()\n
\n\n

2. GRDB.swift — مكتبة SQLite حديثة مع ترحيلات

\n\n

GRDB.swift هي مكتبة قوية للعمل مع SQLite، وتقدم آلية ترحيل مدمجة. تسمح بإصدار مخطط قاعدة البيانات وتنفيذ التغييرات بشكل تسلسلي.

\n\n

التثبيت عبر Swift Package Manager:

\n
// Package.swift\ndependencies: [\n    .package(url: "https://github.com/groue/GRDB.swift.git", from: "6.0.0")\n]\n
\n\n

مثال على الترحيل باستخدام GRDB.swift:

\n
import GRDB\n\nvar migrator = DatabaseMigrator()\n\n// الترحيل 1: إنشاء جدول\nmigrator.registerMigration("v1_create_users") { db in\n    try db.create(table: "users") { t in\n        t.autoIncrementedPrimaryKey("id")\n        t.column("name", .text).notNull()\n        t.column("email", .text).unique()\n    }\n}\n\n// الترحيل 2: إضافة عمود\nmigrator.registerMigration("v2_add_age") { db in\n    try db.alter(table: "users") { t in\n        t.add(column: "age", .integer).defaults(to: 0)\n    }\n}\n\n// تطبيق الترحيلات عند بدء التطبيق\nlet dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")\ntry migrator.migrate(dbQueue)\n
\n\n

3. Fluent (Vapor) — ORM لـ Swift من جانب الخادم

\n\n

Fluent هو ORM جزء من إطار عمل Vapor (Swift من جانب الخادم لنظام macOS). يتم وصف الترحيلات في Fluent كفئات تطبق بروتوكول Migration.

\n\n

مثال على الترحيل لـ Fluent 4:

\n
import Fluent\n\nstruct CreateUser: Migration {\n    func prepare(on database: Database) -> EventLoopFuture<Void> {\n        database.schema("users")\n            .id()\n            .field("name", .string, .required)\n            .field("email", .string, .required).unique(on: "email")\n            .create()\n    }\n    \n    func revert(on database: Database) -> EventLoopFuture<Void> {\n        database.schema("users").delete()\n    }\n}\n\n// التسجيل في configure.swift\napp.migrations.add(CreateUser())\ntry app.autoMigrate().wait()\n
\n\n

4. مقارنة الأدوات

\n\n
    \n
  • Core Data — مناسب لتطبيقات Apple المرتبطة بالنموذج الكائني. الترحيلات غالباً تلقائية، لكن السيناريوهات المعقدة تتطلب نموذج تعيين (mapping model).

توصيات