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

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

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

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

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

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

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

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

  • استخدام _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.

لتنفيذ التغييرات التالية، باستخدام إضافة VS Code Firebase، في طريقة عرض محرر الملفات المناسبة، انقر على تشغيل (مرحلة الإنتاج) أو تشغيل (محلي) أزرار 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"
    }
  ])
}

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

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

للقيام بذلك، إذا لم يضيف رمز النموذج الأوّلي سجلات إلى جداولك، فاستخدم تم توفير تغيير _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",
    }
   …
}

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