في 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",
}
…
}
ما هي الخطوات التالية؟
- تعرَّف على المزيد من المعلومات عن دمج Admin SDK في مشاريع Data Connect.