في 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.