0Pricing
TypeScript Academy · Ders

Türlerle İlişkiler ve Birleştirmeler

Birleştirilmiş sonuçların türlerinin doğru olması için ilişkileri modelleyin.

Türlerle İlişkiler ve Birleştirmeler, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.

Tür Bilgisi Taşıyan İlişkiler ve İç İçe Sonuçlar

Gerçek şemalarda ilişkiler bulunur: bir kullanıcının birçok gönderisi, bir gönderinin de bir kullanıcısı vardır. Tür güvenli bir ORM, bu ilişkileri bildirmenize ve ilişkisel sorgulardan doğru şekilde iç içe yerleştirilmiş, tür bilgisi taşıyan sonuçlar almanıza olanak tanır.

İlişkileri Bildirme

Tabloların yanında, bunların nasıl bağlandığını açıklayan bir ilişkiler nesnesi tanımlarsınız. Bu üst veri hem SQL oluşturmayı hem de sonuç türünü destekler.

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],
  }),
}));

İlişkisel Bir Sorgu

Sorgu API'si, with ile ilişkili satırları istemenize olanak tanır. Sonuç, ilişkili verileri ilişki adının altında iç içe yerleştirir.

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

one ve many Türü Belirler

many ilişkisi bir dizi, one ilişkisi ise tek bir nesne (veya null) üretir. İç içe tür, bildirdiğiniz kardinaliteye uyar.

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

İlişkiler İçindeki Sütunları Seçme

Hem üst satırdaki hem de iç içe satırlardaki sütunları daraltabilirsiniz. Sonuç türü her düzeyde bağımsız olarak daralır.

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 }[] }[]

Tür Bilgisi Taşıyan Sütunlarla Elle Birleştirmeler

Daha alt düzeydeki birleştirmeler de tür bilgisi taşımaya devam eder. Birleştirme koşulu, tür bilgisi taşıyan sütun başvurularını kullanır; select ise düz sonuç şeklini belirler.

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 Null Olabilirliği Getirir

Bir LEFT JOIN sağ tarafta eksik satırlar üretebilir; bu nedenle birleştirilen sütunlar sonuç türünde null olabilir hâle gelir. ORM bunu otomatik olarak yansıtır.

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 }[]

İç İçe ve Düz Sonuçlar

İlişkisel sorgular (findMany + with) iç içe nesneler verir; elle yapılan birleştirmeler düz satırlar verir. Nesne grafikleri istediğinizde iç içe yapıyı, tablo biçiminde yansıtma istediğinizde düz yapıyı seçin.

İç İçe Yerleştirme Türü Nasıl Belirlenir

İlişkiler üst verisi tür düzeyinde okunur. Sorgu türü, temel satırı; istenen ilişkilerin anahtarlarını taşıyan bir nesneyle kesiştirir. Her anahtar, kardinalitesine göre dizi veya tekil türe eşlenir.

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

Derin İç İçe İlişkiler

İlişkiler birleştirilebilir. Bir ilişkinin ilişkisini isteyebilirsiniz; çıkarımın tamamı yapılarak tür de aynı derinlikte iç içe yerleştirilir.

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

Bu Neden Önemli

İç içe birleştirme sonuçlarını elle türlendirmek hataya açıktır ve şemadan zamanla uzaklaşır. Bunları bildirilen ilişkilerden türetmek, nesne grafiğinin türünü ve SQL'i eşzamanlı tutar; böylece bir ilişkiyi yeniden adlandırmak, üretimde beklenmedik bir sorun yerine derleme hatası olur.

Hızlı Denetim

Tür bilgisi taşıyan ilişkiler ve birleştirmeler konusundaki kavrayışınızı sınayın.

Özet

İlişkileri bildirdiniz ve ardından ORM'in iç içe yerleştirilmiş, tür bilgisi taşıyan sonuçlar üretmesini sağladınız: many diziler, one tekil nesneler üretir; kısmi seçimler her düzeyi daraltır; LEFT JOIN işlemleri null olabilirliği getirir ve derin iç içe ilişkiler birleştirilebilir. İlişki üst verisi hem SQL'i hem de sonuç türlerini yönlendirerek bunları eşzamanlı tutar.

Sıkça Sorulan Sorular

“Türlerle İlişkiler ve Birleştirmeler” dersi ücretsiz mi?

Evet — “Türlerle İlişkiler ve Birleştirmeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.

“Türlerle İlişkiler ve Birleştirmeler” dersinde ne öğreneceğim?

Birleştirilmiş sonuçların türlerinin doğru olması için ilişkileri modelleyin. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Türlerle İlişkiler ve Birleştirmeler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Şemadan Türe Eşleme
  2. Tür Güvenli Sorgu Oluşturma
  3. Sorgu Sonucu Biçimlerini Çıkarma
  4. Türlerle İlişkiler ve Birleştirmeler
← TypeScript Academy Sayfasına Dön