ডেটা কানেক্ট স্কিমা ডিজাইন করুন

Firebase Data Connect এর সাথে, আপনি একটি GraphQL স্কিমা ডিজাইন করেন যা আপনার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় ডেটা মডেলকে উপস্থাপন করে। Data Connect এই স্কিমাটিকে পোস্টগ্রেএসকিউএল ইন্সট্যান্সের জন্য ক্লাউড এসকিউএল-এ রূপান্তর করে যা আপনার অ্যাপকে সমর্থন করে। তারপর আপনি ব্যাকএন্ডের সাথে ইন্টারফেস করার জন্য প্রশ্ন এবং মিউটেশন লেখেন এবং ক্লায়েন্ট কোড থেকে আপনার ডেটা ব্যবহার করার জন্য এই ক্রিয়াকলাপগুলিকে সংযোগকারীতে বান্ডিল করেন।

Data Connect আপনাকে আপনার স্কিমা ডিজাইন এবং বাস্তবায়নে সহায়তা করার জন্য AI টুলিং অফার করে। এই নির্দেশিকাটি স্কিমা ডিজাইনের গুরুত্বপূর্ণ ধারণার সাথে পরিচয় করিয়ে দেয় যখন আপনি একটি অ্যাপ তৈরি করা শুরু করেন এবং তার পরেও আপনার স্ট্যান্ডার্ড এবং এআই-সহায়ক ওয়ার্কফ্লোকে সমর্থন ও পরিপূরক করেন।

শুরু করুন গাইড PostgreSQL-এর জন্য একটি মুভি পর্যালোচনা অ্যাপ স্কিমা প্রবর্তন করেছে।

এই নির্দেশিকা সেই স্কিমাটিকে আরও বিকাশ করে এবং চূড়ান্ত মুভি পর্যালোচনা অ্যাপ স্কিমার সমতুল্য একটি SQL তালিকা প্রদান করে।

সিনেমা পর্যালোচনা অ্যাপের স্কিমা

কল্পনা করুন যে আপনি এমন একটি পরিষেবা তৈরি করতে চান যা ব্যবহারকারীদের সিনেমা পর্যালোচনা জমা দিতে এবং দেখতে দেয়।

মৌলিক প্রশ্ন সমর্থন করার জন্য এই ধরনের একটি অ্যাপের জন্য আপনার একটি প্রাথমিক স্কিমা প্রয়োজন। জটিল রিলেশনাল প্রশ্ন তৈরি করতে আপনি পরে এই স্কিমাটি প্রসারিত করবেন।

Data Connect , আপনার ক্লায়েন্টরা যে ডেটা জিজ্ঞাসা করতে এবং ম্যানিপুলেট করতে পারে তার আকার নির্ধারণ করতে আপনি GraphQL প্রকারগুলিকে সংজ্ঞায়িত করবেন৷ আপনি যখন আপনার স্কিমা লেখেন, তখন আপনার প্রকারগুলি পোস্টগ্রেএসকিউএল টেবিলের জন্য ক্লাউড এসকিউএল-এ অনুবাদ করা হয়, বেশিরভাগ ক্ষেত্রেই গ্রাফকিউএল প্রকার এবং ডাটাবেস টেবিলের মধ্যে সরাসরি সম্পর্ক থাকে, যদিও অন্যান্য ম্যাপিং সম্ভব। এই নির্দেশিকা মৌলিক থেকে আরও উন্নত কিছু উদাহরণ দেখায়।

একটি মৌলিক Movie ধরন সংজ্ঞায়িত করুন

আপনি একটি Movie টাইপ দিয়ে শুরু করতে পারেন।

Movie স্কিমাতে মূল নির্দেশাবলী রয়েছে যেমন:

  • এসকিউএল টেবিল এবং কলামের নাম কাস্টমাইজ করতে @table(name) এবং @col(name) । নির্দিষ্ট না থাকলে ডেটা কানেক্ট স্নেক_কেস নাম তৈরি করে।
  • @col(dataType) SQL কলামের ধরন কাস্টমাইজ করতে।
  • সন্নিবেশের সময় SQL কলাম ডিফল্ট মান কনফিগার করতে @default

আরো বিস্তারিত জানার জন্য, @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 স্বয়ংক্রিয়ভাবে আপনার স্কিমাগুলির মূল ক্ষেত্রগুলি থেকে একত্রিত হয়৷ মূল স্কেলারগুলি দক্ষতা সম্পর্কে, যা আপনাকে আপনার ডেটার পরিচয় এবং গঠন সম্পর্কে একটি একক কলের তথ্য খুঁজে পেতে দেয়৷ এগুলি বিশেষভাবে উপযোগী হয় যখন আপনি নতুন রেকর্ডে ক্রমিক ক্রিয়া সম্পাদন করতে চান এবং আসন্ন ক্রিয়াকলাপগুলিতে পাস করার জন্য একটি অনন্য শনাক্তকারীর প্রয়োজন হয় এবং এছাড়াও আপনি অতিরিক্ত জটিল ক্রিয়াকলাপগুলি সম্পাদন করার জন্য রিলেশনাল কীগুলি অ্যাক্সেস করতে চান৷

সার্ভার মান ব্যবহার করে, আপনি expr আর্গুমেন্টে নির্দিষ্ট সার্ভার-সাইড CEL এক্সপ্রেশন অনুযায়ী সঞ্চিত বা সহজে-গণনাযোগ্য মান ব্যবহার করে সার্ভারটিকে আপনার টেবিলে গতিশীলভাবে ক্ষেত্রগুলিকে পপুলেট করতে দিতে পারেন। উদাহরণস্বরূপ, আপনি একটি ক্ষেত্র সংজ্ঞায়িত করতে পারেন একটি টাইমস্ট্যাম্প প্রয়োগ করে যখন ফিল্ডটি একটি অপারেশন অনুরোধে সংরক্ষিত সময় ব্যবহার করে অ্যাক্সেস করা হয়, 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 ক্ষেত্র

movie ক্ষেত্র Movie টেবিলে একটি একক রেকর্ড উপস্থাপন করে।

একটি একক মুভির কী দ্বারা অনুসন্ধান করতে এই ক্ষেত্রটি ব্যবহার করুন৷

query GetMovie($myKey: Movie_Key!) {
  movie(key: $myKey) { title }
}

সঙ্গে প্রশ্ন
movies ক্ষেত্র

movies ক্ষেত্রটি Movie টেবিলে রেকর্ডের একটি তালিকা উপস্থাপন করে।

একাধিক সিনেমার জন্য এই ক্ষেত্রটি ব্যবহার করুন, উদাহরণস্বরূপ, একটি প্রদত্ত বছরের সমস্ত সিনেমা।

query GetMovies($myYear: Int!) {
  movies(where: { year: { eq: $myYear } }) { title }
}

সঙ্গে প্রশ্ন
actors_on_movies ক্ষেত্র

actors_on_movies ক্ষেত্রটি রেকর্ডের একটি তালিকা উপস্থাপন করে যা Actor এবং Movie টেবিলকে সংযুক্ত করে। একটি প্রদত্ত চলচ্চিত্রের সাথে যুক্ত সমস্ত অভিনেতাদের জিজ্ঞাসা করতে এই ক্ষেত্রটি ব্যবহার করুন৷

একটি প্রদত্ত চলচ্চিত্রের সাথে যুক্ত সমস্ত অভিনেতাদের জিজ্ঞাসা করতে এই ক্ষেত্রটি ব্যবহার করুন৷

  query GetActorsOnMovie($myKey: Movie_Key!) {
    actors_on_movies(where: { movie: { key: { eq: $myKey } } }) {
      actor { name }
    }
  }

এটি মাথায় রেখে, আপনি এই ক্ষেত্রগুলি ব্যবহার করে ক্রিয়াকলাপগুলি কীভাবে বাস্তবায়ন করবেন তা পড়তে পারেন প্রশ্নগুলি বাস্তবায়নের নির্দেশিকা এবং মিউটেশনগুলি বাস্তবায়নের নির্দেশিকাতে

আরও উন্নত স্কিমা ধারণা

মৌলিক কিন্তু দরকারী প্রকার এবং সম্পর্কের বাইরে যেতে, রেফারেন্স ডকুমেন্টেশনের উদাহরণগুলি পড়ুন।

সমর্থিত ডেটা প্রকার

Data Connect @col(dataType:) ব্যবহার করে PostgreSQL প্রকারের অ্যাসাইনমেন্ট সহ নিম্নলিখিত স্কেলার ডেটা প্রকারগুলিকে সমর্থন করে।

Data Connect ধরন গ্রাফকিউএল বিল্ট-ইন টাইপ বা
Data Connect কাস্টম টাইপ
ডিফল্ট PostgreSQL প্রকার সমর্থিত PostgreSQL প্রকার
(বন্ধনীতে ওরফে)
স্ট্রিং গ্রাফকিউএল পাঠ্য পাঠ্য
bit(n), varbit(n)
char(n), varchar(n)
int গ্রাফকিউএল int Int2 (ছোট, ছোট সিরিয়াল),
int4 (পূর্ণসংখ্যা, int, সিরিয়াল)
ভাসা গ্রাফকিউএল float8 float4 (বাস্তব)
float8 (ডবল নির্ভুলতা)
সংখ্যাসূচক (দশমিক)
বুলিয়ান গ্রাফকিউএল বুলিয়ান বুলিয়ান
UUID কাস্টম uuid uuid
Int64 কাস্টম bigint int8 (বড়, বড় সিরিয়াল)
সংখ্যাসূচক (দশমিক)
তারিখ কাস্টম তারিখ তারিখ
টাইমস্ট্যাম্প কাস্টম টাইমস্ট্যাম্পটজ

টাইমস্ট্যাম্পটজ

দ্রষ্টব্য: স্থানীয় সময় অঞ্চল তথ্য সংরক্ষণ করা হয় না.
PostgreSQL রূপান্তর করে এবং UTC এর মতো টাইমস্ট্যাম্প সংরক্ষণ করে।

ভেক্টর কাস্টম ভেক্টর

ভেক্টর

Vertex AI এর সাথে ভেক্টর সাদৃশ্য অনুসন্ধান করুন।

  • GraphQL List একটি এক-মাত্রিক অ্যারের মানচিত্র।
    • উদাহরণস্বরূপ, [Int] মানচিত্র int5[] , [Any] মানচিত্র jsonb[]
    • Data Connect নেস্টেড অ্যারে সমর্থন করে না।

সমতুল্য এসকিউএল স্কিমা

-- 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);

পরবর্তী পদক্ষেপ

আপনি আগ্রহী হতে পারে: