TypeScript Academy · पाठ

प्रकारों के साथ संबंध और जॉइन

संबंधों का मॉडल बनाएँ ताकि जॉइन किए गए परिणामों के प्रकार सही हों।

पाठ 4, कुल 4 में से13 चरण

प्रकारों के साथ संबंध और जॉइन, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

प्रकारयुक्त संबंध और नेस्टेड परिणाम

वास्तविक स्कीमा में संबंध होते हैं: एक उपयोगकर्ता के कई posts होते हैं और एक पोस्ट किसी उपयोगकर्ता से संबंधित होती है। प्रकार-सुरक्षित ओआरएम आपको ये संबंध घोषित करने देता है और फिर संबंधपरक क्वेरी से सही ढंग से नेस्टेड, प्रकारयुक्त परिणाम लौटाता है।

संबंध घोषित करना

तालिकाओं के साथ-साथ आप एक संबंध ऑब्जेक्ट परिभाषित करते हैं, जो बताता है कि वे कैसे जुड़ी हैं। यह मेटाडेटा एसक्यूएल निर्माण और परिणाम प्रकार—दोनों को संचालित करता है।

import { relations } from "drizzle-orm";

export const usersRelations = relations(users, ({ many }) => ({
  posts: many(posts),
}));

export const postsRelations = relations(posts, ({ one }) => ({
  author: one(users, {
    fields: [posts.authorId],
    references: [users.id],
  }),
}));

एक संबंधपरक क्वेरी

क्वेरी एपीआई आपको with के माध्यम से संबंधित पंक्तियाँ माँगने देता है। परिणाम संबंधित डेटा को संबंध के नाम के नीचे नेस्ट कर देता है।

const result = await db.query.users.findMany({
  with: { posts: true },
});
// result: (User & { posts: Post[] })[]

one बनाम कई प्रकार तय करते हैं

many संबंध एक सारणी देता है; one संबंध एक अकेला ऑब्जेक्ट या null देता है। नेस्टेड प्रकार आपके द्वारा घोषित बहुलता से मेल खाता है।

const r = await db.query.posts.findMany({
  with: { author: true },
});
// r: (Post & { author: User })[]   // author is a single object

संबंधों के भीतर कॉलम चुनना

आप मूल पंक्तियों और नेस्टेड पंक्तियों—दोनों को सीमित कर सकते हैं। परिणाम प्रकार हर स्तर पर स्वतंत्र रूप से सीमित होता है।

const r = await db.query.users.findMany({
  columns: { id: true, name: true },
  with: {
    posts: { columns: { title: true } },
  },
});
// r: { id: number; name: string; posts: { title: string }[] }[]

प्रकारयुक्त कॉलम के साथ मैन्युअल JOIN

निचले स्तर के JOIN भी प्रकारयुक्त रहते हैं। JOIN की शर्त प्रकारयुक्त कॉलम संदर्भों का उपयोग करती है और select सपाट परिणाम का आकार तय करता है।

const rows = await db
  .select({ author: users.name, title: posts.title })
  .from(posts)
  .innerJoin(users, eq(users.id, posts.authorId));
// rows: { author: string; title: string }[]

LEFT JOIN नलता लाता है

एक LEFT JOIN दाईं ओर की पंक्तियों को अनुपस्थित कर सकता है, इसलिए परिणाम प्रकार में जुड़े हुए कॉलम नल-योग्य हो जाते हैं। ओआरएम इसे अपने-आप दर्शाता है।

const rows = await db
  .select({ name: users.name, title: posts.title })
  .from(users)
  .leftJoin(posts, eq(posts.authorId, users.id));
// rows: { name: string; title: string | null }[]

नेस्टेड बनाम सपाट परिणाम

संबंधपरक क्वेरी (findMany + with) नेस्टेड ऑब्जेक्ट देती हैं; मैन्युअल JOIN सपाट पंक्तियाँ देते हैं। जब आपको ऑब्जेक्ट ग्राफ़ चाहिए, तब नेस्टेड परिणाम चुनें; सारणीबद्ध प्रक्षेपण चाहिए, तब सपाट परिणाम चुनें।

नेस्टिंग का प्रकार कैसे तय होता है

संबंधों का मेटाडेटा प्रकार स्तर पर पढ़ा जाता है। क्वेरी प्रकार मूल पंक्ति और एक ऐसे ऑब्जेक्ट का प्रतिच्छेद करता है, जिसकी कुंजियाँ माँगे गए संबंध होते हैं; प्रत्येक कुंजी अपनी बहुलता के अनुसार सारणी या एकल प्रकार में मैप होती है।

type WithPosts = User & { posts: Post[] };
// "many" -> Post[], "one" -> User (or User | null for optional)

गहराई तक नेस्टेड संबंध

संबंध संयोजित किए जा सकते हैं। आप किसी संबंध के भीतर का संबंध माँग सकते हैं और प्रकार भी उतनी ही गहराई तक नेस्ट होता है—सब कुछ अनुमानित रहता है।

await db.query.users.findMany({
  with: { posts: { with: { comments: true } } },
});
// User & { posts: (Post & { comments: Comment[] })[] }

यह क्यों महत्वपूर्ण है

नेस्टेड JOIN परिणामों के प्रकार हाथ से लिखना त्रुटिपूर्ण होता है और वे स्कीमा से अलग हो सकते हैं। घोषित संबंधों से उन्हें व्युत्पन्न करने पर ऑब्जेक्ट ग्राफ़ का प्रकार और एसक्यूएल एक साथ तालमेल में रहते हैं, इसलिए संबंध का नाम बदलना संकलन त्रुटि बनता है, उत्पादन में मिलने वाला अप्रत्याशित आश्चर्य नहीं।

त्वरित जाँच

प्रकारयुक्त संबंधों और JOIN पर अपनी समझ जाँचें।

पुनरावलोकन

आपने संबंध घोषित किए और फिर ओआरएम को नेस्टेड प्रकारयुक्त परिणाम बनाने दिया: many सारणियाँ देता है, one एकल ऑब्जेक्ट देता है, आंशिक चयन हर स्तर को सीमित करता है, LEFT JOIN नलता लाता है और गहराई तक नेस्टेड संबंध संयोजित होते हैं। संबंधों का मेटाडेटा एसक्यूएल और परिणाम प्रकार—दोनों को संचालित करता है और उन्हें समन्वय में रखता है।

शुरुआत निःशुल्क

एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
101
पाठ
352

अक्सर पूछे जाने वाले प्रश्न

क्या “प्रकारों के साथ संबंध और जॉइन” पाठ निःशुल्क है?

हाँ—“प्रकारों के साथ संबंध और जॉइन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“प्रकारों के साथ संबंध और जॉइन” में मैं क्या सीखूँगा?

संबंधों का मॉडल बनाएँ ताकि जॉइन किए गए परिणामों के प्रकार सही हों। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ TypeScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या TypeScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर TypeScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“प्रकारों के साथ संबंध और जॉइन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस TypeScript Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर TypeScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. स्कीमा-से-प्रकार मैपिंग
  2. प्रकार-सुरक्षित क्वेरी निर्माण
  3. क्वेरी परिणाम की आकृतियों का अनुमान
  4. प्रकारों के साथ संबंध और जॉइन
← TypeScript Academy पर वापस जाएँ