با Firebase Data Connect ، شما یک طرح GraphQL طراحی می کنید که مدل داده مورد نیاز برای برنامه شما را نشان می دهد. Data Connect این طرح را به Cloud SQL برای نمونه PostgreSQL تبدیل می کند که از برنامه شما پشتیبانی می کند. سپس پرس و جوها و جهش ها را می نویسید تا با پشتیبان ارتباط برقرار کنید و این عملیات را در کانکتورهایی برای استفاده از داده های خود از کد مشتری قرار دهید.
Data Connect ابزار هوش مصنوعی را برای کمک به طراحی و پیاده سازی طرحواره های خود ارائه می دهد. این راهنما مفاهیم مهم طراحی طرحواره را برای پشتیبانی و تکمیل جریان های کاری استاندارد و با کمک هوش مصنوعی هنگام شروع توسعه یک برنامه و فراتر از آن معرفی می کند.
راهنمای شروع یک طرح برنامه بررسی فیلم برای PostgreSQL معرفی شد.
این راهنما آن طرح را بیشتر توسعه می دهد و فهرستی SQL معادل طرح نهایی برنامه بررسی فیلم ارائه می دهد.
طرحی برای یک برنامه بررسی فیلم
تصور کنید می خواهید سرویسی بسازید که به کاربران اجازه می دهد نظرات فیلم را ارسال و مشاهده کنند.
برای پشتیبانی از پرس و جوهای اولیه، برای چنین برنامه ای به یک طرح اولیه نیاز دارید. بعداً این طرح را برای ایجاد پرس و جوهای رابطه ای پیچیده گسترش خواهید داد.
در Data Connect ، انواع GraphQL را برای تعریف شکل داده هایی که مشتریان شما می توانند جستجو و دستکاری کنند، تعریف می کنید. هنگامی که شما طرحواره خود را می نویسید، انواع شما به Cloud SQL برای جداول PostgreSQL ترجمه می شود، اغلب در رابطه مستقیم بین انواع GraphQL و جداول پایگاه داده، اگرچه نگاشت های دیگر نیز امکان پذیر است. این راهنما چند نمونه از پایه تا پیشرفته را نشان می دهد.
یک نوع Movie
اصلی را تعریف کنید
می توانید با یک نوع Movie
شروع کنید.
طرحواره Movie
حاوی دستورالعمل های اصلی مانند:
-
@table(name)
و@col(name)
برای سفارشی کردن جدول SQL و نام ستون. Data Connect نامهای snake_case را در صورت عدم مشخص کردن ایجاد میکند. -
@col(dataType)
برای سفارشی کردن انواع ستون SQL. -
@default
برای پیکربندی مقادیر پیشفرض ستون SQL در حین درج.
برای جزئیات بیشتر، اسناد مرجع برای @table
، @col
، @default
را بررسی کنید.
# Movies
type Movie @table(name: "movie", key: "id") {
id: UUID! @col(name: "movie_id") @default(expr: "uuidV4()")
title: String!
releaseYear: Int
genre: String @col(dataType: "varchar(20)")
rating: Int
description: String
}
داده های مهم کاربر را به صورت خودکار در یک نوع User
ذخیره کنید
برنامه شما کاربران را ردیابی می کند، بنابراین به یک نوع User
نیاز دارید.
دستورالعمل @default
به ویژه در این مورد مفید است. فیلد id
در اینجا می تواند به طور خودکار شناسه کاربر را از احراز هویت بگیرد: به استفاده از @default(expr: "auth.uid")
در نمونه زیر توجه کنید.
# Users
# Suppose a user can leave reviews for movies
type User @table {
id: String! @default(expr: "auth.uid")
username: String! @col(dataType: "varchar(50)")
}
اسکالرهای کلیدی و مقادیر سرور
قبل از بررسی بیشتر برنامه بررسی فیلم، مهم است که اسکالرهای کلید Data Connect و مقادیر سرور را معرفی کنید.
اسکالرهای کلیدی شناسه های شی مختصر هستند که Data Connect به طور خودکار از فیلدهای کلیدی در طرحواره های شما جمع آوری می کند. اسکالرهای کلیدی در مورد کارایی هستند و به شما امکان می دهند در یک تماس اطلاعاتی درباره هویت و ساختار داده های خود پیدا کنید. آنها به ویژه زمانی مفید هستند که می خواهید اقدامات متوالی را روی رکوردهای جدید انجام دهید و به یک شناسه منحصر به فرد برای ارسال به عملیات آینده نیاز دارید، و همچنین زمانی که می خواهید به کلیدهای رابطه ای برای انجام عملیات پیچیده تر اضافی دسترسی داشته باشید.
با استفاده از مقادیر سرور ، می توانید به طور موثر به سرور اجازه دهید فیلدهای جداول شما را با استفاده از مقادیر ذخیره شده یا قابل محاسبه بر اساس عبارات خاص CEL سمت سرور در آرگومان expr
به صورت پویا پر کند. به عنوان مثال، میتوانید فیلدی را تعریف کنید که وقتی به فیلد با استفاده از زمان ذخیرهشده در یک درخواست عملیات دسترسی داده میشود، یک مهر زمانی اعمال میشود updatedAt: Timestamp! @default(expr: "request.time")
.
روابط چند به چند را در انواع Actor
و MovieActor
مدیریت کنید
با استفاده از کاربران، می توانید به مدل سازی داده های فیلم بازگردید.
بعد، شما می خواهید بازیگران در فیلم های شما بازی کنند.
جدول Actor
بسیار ساده است.
# 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! @default(expr: "uuidV4()")
name: String! @col(dataType: "varchar(30)")
}
اگر می خواهید بازیگران در چندین فیلم حضور داشته باشند و فیلم ها چندین بازیگر داشته باشند، به یک "جدول پیوستن" نیاز دارید.
جدول MovieActor
رابطه چند به چند را کنترل می کند و کلید اصلی آن ترکیبی از [movie, actor]
(فیلدهای کلید خارجی movie
و actor
) است.
# Join table for many-to-many relationship for movies and actors
# The 'key' param signifies the primary keys of this table
# In this case, the keys are [movieId, actorId], the foreign key fields of the reference fields [movie, actor]
type MovieActor @table(key: ["movie", "actor"]) {
movie: Movie!
# movieId: UUID! <- implicitly added foreign key field
actor: Actor!
# actorId: UUID! <- implicitly added foreign key field
role: String! # "main" or "supporting"
# optional other fields
}
هنگامی که یک رابطه SQL را روی جدول با یک محدودیت کلید خارجی تعریف می کنید، Data Connect به طور خودکار فیلد مربوطه را در طرف دیگر ایجاد می کند. شما نیازی به تعریف فیلد نگاشت معکوس ندارید (به عنوان مثال، از Actor
بازگشت به MovieActor
).
روابط یک به یک را در نوع MovieMetadata
مدیریت کنید
اکنون، کارگردانان فیلم را ردیابی کنید، و همچنین یک رابطه یک به یک با Movie
برقرار کنید.
میتوانید از دستور @ref
برای سفارشی کردن محدودیتهای کلید خارجی استفاده کنید:
-
@ref(fields)
مشخص می کند که از کدام فیلدهای کلید خارجی استفاده شود. -
@ref(references)
فیلدهای ارجاع شده در جدول هدف را مشخص می کند (به طور پیش فرض کلید اصلی است، اما فیلدهای@unique
نیز کار می کنند). این یک گزینه پیشرفته تر است. Data Connect اغلب می تواند این را برای شما استنباط کند.
برای جزئیات بیشتر، اسناد مرجع برای @ref
را بررسی کنید.
# Movie Metadata
# Movie - MovieMetadata is a one-to-one relationship
type MovieMetadata @table {
# @unique ensures that each Movie only has one MovieMetadata.
movie: Movie! @unique
# Since it references to another table type, it adds a foreign key constraint.
# movie: Movie! @unique @ref(fields: "movieId", references: "id")
# movieId: UUID! <- implicitly added foreign key field
director: String
}
از فیلدهای ایجاد شده از طرحواره خود برای ساخت عملیات استفاده کنید
عملیات Data Connect شما مجموعه ای از فیلدها را گسترش می دهد که به طور خودکار Data Connect تولید می شود بر اساس انواع و روابط نوع در طرح شما. هر زمان که شما طرحواره خود را ویرایش می کنید، این فیلدها توسط ابزارهای محلی ایجاد می شوند.
فرض کنید طرح شما حاوی یک نوع Movie
و یک نوع Actor
مرتبط است. Data Connect movie
، movies
، فیلدهای actors_on_movies
و موارد دیگر را تولید می کند.
پرس و جو با
زمینه movie
فیلد | از این فیلد برای پرس و جو از یک فیلم با کلید آن استفاده کنید. query GetMovie($myKey: Movie_Key!) { movie(key: $myKey) { title } } |
پرس و جو با
زمینه movies
فیلد | از این فیلد برای پرس و جو از چندین فیلم، به عنوان مثال، همه فیلمهای دارای یک سال معین استفاده کنید. query GetMovies($myYear: Int!) { movies(where: { year: { eq: $myYear } }) { title } } |
پرس و جو با
قسمت actors_on_movies
قسمت | از این فیلد برای پرس و جو از همه بازیگران مرتبط با یک فیلم خاص استفاده کنید. query GetActorsOnMovie($myKey: Movie_Key!) { actors_on_movies(where: { movie: { key: { eq: $myKey } } }) { actor { name } } } |
با در نظر گرفتن این موضوع، میتوانید نحوه اجرای عملیات با استفاده از این فیلدها را در راهنمای پیادهسازی کوئریها و راهنمای پیادهسازی جهشها بخوانید.
مفاهیم طرحواره پیشرفته تر
برای فراتر رفتن از انواع و روابط اساسی اما مفید، به مثالهایی در مستندات مرجع مراجعه کنید.
انواع داده های پشتیبانی شده
Data Connect از انواع داده های اسکالر زیر پشتیبانی می کند، با انتساب به انواع PostgreSQL با استفاده از @col(dataType:)
.
نوع Data Connect | GraphQL توکار نوع یا نوع سفارشی Data Connect | نوع پیش فرض PostgreSQL | پشتیبانی از انواع PostgreSQL (نام مستعار داخل پرانتز) |
---|---|---|---|
رشته | GraphQL | متن | متن بیت (n)، varbit (n) char(n)، varchar(n) |
بین المللی | GraphQL | بین المللی | Int2 (کوچک، سریال کوچک)، int4 (عدد صحیح، int، سریال) |
شناور | GraphQL | شناور8 | float4 (واقعی) float8 (دقت دوگانه) عددی (اعشاری) |
بولی | GraphQL | بولی | بولی |
UUID | سفارشی | uuid | uuid |
Int64 | سفارشی | bigint | int8 (bigint، bigserial) عددی (اعشاری) |
تاریخ | سفارشی | تاریخ | تاریخ |
مهر زمان | سفارشی | timestamptz | timestamptz توجه: اطلاعات منطقه زمانی محلی ذخیره نمی شود. |
بردار | سفارشی | بردار | بردار به انجام جستجوی شباهت برداری با Vertex AI مراجعه کنید. |
- GraphQL
List
به یک آرایه یک بعدی نگاشت می شود.- برای مثال،
[Int]
بهint5[]
,[Any]
بهjsonb[]
نقشه میدهد. - Data Connect از آرایه های تو در تو پشتیبانی نمی کند.
- برای مثال،
طرحواره SQL معادل
-- Movies Table
CREATE TABLE Movies (
movie_id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
title VARCHAR(255) NOT NULL,
release_year INT,
genre VARCHAR(30),
rating INT,
description TEXT,
tags TEXT[]
);
-- Movie Metadata Table
CREATE TABLE MovieMetadata (
movie_id UUID REFERENCES Movies(movie_id) UNIQUE,
director VARCHAR(255) NOT NULL,
PRIMARY KEY (movie_id)
);
-- Actors Table
CREATE TABLE Actors (
actor_id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
name VARCHAR(30) NOT NULL
);
-- MovieActor Join Table for Many-to-Many Relationship
CREATE TABLE MovieActor (
movie_id UUID REFERENCES Movies(movie_id),
actor_id UUID REFERENCES Actors(actor_id),
role VARCHAR(50) NOT NULL, # "main" or "supporting"
PRIMARY KEY (movie_id, actor_id),
FOREIGN KEY (movie_id) REFERENCES Movies(movie_id),
FOREIGN KEY (actor_id) REFERENCES Actors(actor_id)
);
-- Users Table
CREATE TABLE Users (
user_id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
user_auth VARCHAR(255) NOT NULL
username VARCHAR(30) NOT NULL
);
-- Reviews Table
CREATE TABLE Reviews (
review_id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
user_id UUID REFERENCES Users(user_id),
movie_id UUID REFERENCES Movies(movie_id),
rating INT,
review_text TEXT,
review_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE (movie_id, user_id)
FOREIGN KEY (user_id) REFERENCES Users(user_id),
FOREIGN KEY (movie_id) REFERENCES Movies(movie_id)
);
-- Self Join Example for Movie Sequel Relationship
ALTER TABLE Movies
ADD COLUMN sequel_to UUID REFERENCES Movies(movie_id);
مراحل بعدی
ممکن است علاقه مند باشید:
- ایجاد طرحواره برای برنامه های خود با استفاده از ابزارهای کمکی هوش مصنوعی
- بررسی مستندات مرجع نحو .