البيانات الأولية وتنفيذ عمليات البيانات المجمّعة

في Firebase Data Connect، يتم تنفيذ عمليات البيانات المجمّعة باستخدام الطفرات. وعلى الرغم من أنّ مشاريع Data Connect تخزّن البيانات في PostgreSQL، لا يمكنك تحميل البيانات بشكل مجمّع باستخدام عبارات SQL أو أدوات SQL، لأنّ هذه المزامنة يجب أن تظل خدمة Data Connect ومخططاتها متزامنتَين مع قاعدة بياناتك، وأن يعمل التطبيق مباشرةً في PostgreSQL.

لهذا السبب، يوفّر Data Connect عمليات _insertMany و_upsertMany و_deleteMany العادية لإنشاء قاعدة بيانات وإدارة البيانات المجمّعة.

عند إنشاء نماذج أولية للتطبيقات وتنفيذ عمليات التطوير/النشر المتكاملَين، يمكن استدعاء هذه الطفرات في بيئة تطوير محلية باستخدام إضافة VS Code ومحاكي Data Connect (اختياريًا) مثيل قاعدة بيانات محلية.

إنشاء قاعدة بيانات في النُسخ المحلية والعلنية

في دليل البدء، يمكنك إعداد تطبيق لإضافة سجلّ واحد إلى جدول واحد باستخدام عملية إدراج مخصّصة.

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

.

تحتاج بيئة وضع النماذج إلى رمز لتنفيذ عملية إنشاء قاعدة بيانات. يقدّم هذا الدليل بعض العيّنات ويوضّح ما يلي:

  • استخدام _insertMany و_upsertMany في الجداول الفردية
  • استخدام _insertMany في الجداول ذات الصلة

تعديل مخطّط تطبيق مراجعة الأفلام

يمكنك استخدام طفرات _insertMany و_upsertMany لتعديل جداول قاعدة بيانات individual واحدة تلو الأخرى، أو تعديل جداول متعددة مرتبطة بعلاقات عمليات الربط. في ما يلي مخطّط موسّع لتطبيق مراجعة الأفلام يساعد في توضيح حالات الاستخدام والأمثلة التالية. ويوسع نطاق schema.gql ليشمل نوع Movie الأوّلي ليشمل نوعَي Actor وMovieActor، ما يتيح لنا إنشاء نماذج أولية لطلبات بحث أكثر تعقيدًا.

# Actors
# Suppose an actor can participate in multiple movies and movies can have multiple actors
# Movie - Actors (or vice versa) is a many to many relationship
type Actor @table {
  id: UUID!
  imageUrl: String! 
  name: String! @col(name: "name", dataType: "varchar(30)")
}

# Join table for many-to-many relationship for movies and actors
# The 'key' param signifies the primary key(s) of this table
# In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor]
type MovieActor @table(key: ["movie", "actor"]) {
  # @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type
  # In this case, @ref(fields: "movieId", references: "id") is implied
  movie: Movie!
  # movieId: UUID! <- this is created by the implied @ref
  actor: Actor!
  # actorId: UUID! <- this is created by the implied @ref
  role: String! # "main" or "supporting"
}

كتابة طفرات لإنشاء بيانات الحالة الصفرية

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

إنشاء قاعدة بيانات في جدولَي Movie وActor

استنادًا إلى المرحلة التي وصلت إليها في إنشاء النماذج الأولية، يمكنك استخدام التقنية نفسها الموضَّحة في دليل "البدء" لإدراج سجلّ واحد أو سجلَّين: أي أنّه يمكنك استخدام عدسات الرموز البرمجية في إضافة VS Code لإنشاء _insertطفرات، وبيانات برمجية ثابتة، وتشغيل هذه الطفرات في VS Code.

في النهاية، من المنطقي إضافة العديد من السجلات إلى جدول باستخدام عملية _insertMany. في مثال تطبيق مراجعات الأفلام، يؤدي ذلك إلى إدراج مجموعة أولية من البيانات في Movie وActor.

لتنفيذ عمليات التحويل التالية باستخدام إضافة Firebase في VS Code، انقر على زرَّي Run (Production) (التشغيل في مرحلة الإنتاج) أو Run (Local) (التشغيل على الجهاز) في CodeLens في عرض محرِّر الملفات المناسب، وذلك استنادًا إلى ما إذا كنت بصدد إنشاء النماذج الأولية باستخدام خدمة مرحلة الإنتاج أو قاعدة بيانات محلية.

# insertMany for Movie
# 2 records shown
mutation {
  movie_insertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
  ])
}
# insertMany for Actor
# 2 records shown
mutation {
  actor_insertMany(data: [
    {
      id: "123e4567-e89b-12d3-a456-426614174000",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
      name: "Leonardo DiCaprio"
    },
    {
      id: "123e4567-e89b-12d3-a456-426614174001",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
      name: "Keanu Reeves"
    }
   ])
}

إنشاء قاعدة بيانات أولية للبيانات في جدول الانضمام MovieActor

لاختبار طلبات البحث والتغييرات باستخدام عمليات الدمج والعمليات المعقّدة الأخرى، يمكنك إضافة سجلّات متعددة إلى جدول MovieActor.

في هذه الحالة، عند تعديل جداول متعددة في هذا النوع من العلاقات، يمكنك إضافة التوجيه @transaction لضمان اكتمال عملية التعديل بشكلٍ سليم.

mutation @transaction {
  movie_insertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
  ])

  actor_insertMany(data: [
    {
      id: "123e4567-e89b-12d3-a456-426614174000",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
      name: "Leonardo DiCaprio"
    },
    {
      id: "123e4567-e89b-12d3-a456-426614174001",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
      name: "Keanu Reeves"
    }
  ])
}

كتابة طفرة لإعادة ضبط بيانات المحتوى الأساسي

أثناء إنشاء النماذج الأولية وتنفيذ عملية التطوير/النشر المتكاملَين، يمكن أن تكون إعادة ضبط البيانات على الحالة الصفرية مفيدة ل executimg سلسلة جديدة من الاختبارات على مجموعة جديدة من البيانات.

لإجراء ذلك، إذا كان رمز النموذج الأولي لا يضيف سجلات إلى جداولك، استخدِم ملف تعريف الارتباط _upsertMany الذي يوفّره Data Connect.

في المثال التالي، يتمّ استدعاء movie_upsertMany بالقيم الأولية لتعديل سجلّات الأفلام إلى حالتها الأصلية.

mutation {
  # Execute an upsertMany operation to update the Movie table
  movie_upsertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
   
}

ما هي الخطوات التالية؟