Kotlin Academy · Ders

Table DSL ile Tablolar Tanımlama

Sütunlar, birincil anahtarlar ve yabancı anahtarlarla türlendirilmiş tablo şemaları tanımlayın.

2. ders / 413 adım

Table DSL ile Tablolar Tanımlama, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 2. 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, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Exposed Tablo Nesneleri

Exposed'da veritabanı tabloları, Table (Sorgu DSL'si) veya IntIdTable/LongIdTable/UUIDTable (DAO katmanı) sınıflarını genişleten Kotlin tekil object nesneleriyle temsil edilir. Sütun tanımları Kotlin özellikleridir.

Temel Bir Tablo Tanımı

Table sınıfını genişletin ve yerleşik sütun oluşturma işlevlerini kullanarak sütunları tanımlayın:

import org.jetbrains.exposed.sql.Table

object Users : Table("users") {
    val id    = long("id").autoIncrement()
    val name  = varchar("name", 100)
    val email = varchar("email", 255).uniqueIndex()
    val age   = integer("age").nullable()

    override val primaryKey = PrimaryKey(id)
}

Sütun Türleri

Exposed, yaygın SQL türleri için oluşturma işlevleri sunar:

  • integer("col"), long("col"), short("col")
  • varchar("col", length), text("col")
  • bool("col"), double("col"), decimal("col", precision, scale)
  • datetime("col"), date("col"), timestamp("col")
  • blob("col"), uuid("col"), binary("col", length)

Boş Değere İzin Veren Sütunlar

NULL değerlerine izin vermek için herhangi bir sütunda .nullable() çağırın. Kotlin türü boş değer kabul edebilir hâle gelir (String yerine String?):

object Products : Table("products") {
    val id          = long("id").autoIncrement()
    val name        = varchar("name", 200)
    val description = text("description").nullable()
    override val primaryKey = PrimaryKey(id)
}

Varsayılan Değerler

Kotlin tarafında bir varsayılan değer (ekleme işleminden önce uygulanır) için .default(value), veritabanı tarafında bir SQL varsayılanı için .defaultExpression(expr) kullanın:

object Orders : Table("orders") {
    val id        = long("id").autoIncrement()
    val status    = varchar("status", 20).default("PENDING")
    val createdAt = datetime("created_at")
        .defaultExpression(CurrentDateTime)
    override val primaryKey = PrimaryKey(id)
}

Dizinler ve Benzersizlik Kısıtlamaları

Bir sütun üzerinde doğrudan normal dizin için .index(), benzersiz dizin için .uniqueIndex() çağırın. Bileşik dizinler için Table üzerinde index() işlevini kullanın:

object Articles : Table("articles") {
    val id    = long("id").autoIncrement()
    val title = varchar("title", 300).index()
    val slug  = varchar("slug", 300).uniqueIndex()
    override val primaryKey = PrimaryKey(id)
}

Yabancı Anahtarlar

Sütunlar arasında bir yabancı anahtar kısıtlaması tanımlamak için .references() kullanın. Başvurulan sütunu, isteğe bağlı olarak da onDelete ve onUpdate eylemlerini aktarın:

object Posts : Table("posts") {
    val id       = long("id").autoIncrement()
    val authorId = long("author_id").references(Users.id, onDelete = ReferenceOption.CASCADE)
    val title    = varchar("title", 300)
    override val primaryKey = PrimaryKey(id)
}

IdTable Çeşitleri

DAO katmanı için düz Table yerine türü belirli kimlik tablolarını kullanın:

  • IntIdTable("name") — id adlı Int otomatik artan birincil anahtar
  • LongIdTable("name") — Long otomatik artan birincil anahtar
  • UUIDTable("name") — UUID birincil anahtarı
object Users : LongIdTable("users") {
    val name  = varchar("name", 100)
    val email = varchar("email", 255).uniqueIndex()
}

Bileşik Birincil Anahtarlar

PrimaryKey() işlevine birden çok sütun aktararak bileşik birincil anahtar tanımlayın:

object UserRoles : Table("user_roles") {
    val userId = long("user_id").references(Users.id)
    val roleId = long("role_id").references(Roles.id)
    override val primaryKey = PrimaryKey(userId, roleId)
}

Enum Sütunları

Kotlin enum değerlerini enumerationByName() veya enumeration() kullanarak dizeler ya da sıra numaraları olarak saklayın:

enum class Status { ACTIVE, INACTIVE, BANNED }

object Users : LongIdTable("users") {
    val name   = varchar("name", 100)
    val status = enumerationByName<Status>("status", 20)
}

Şema Değişikliklerini Uygulama

Mevcut verileri silmeden eksik tabloları ve sütunları eklemek için SchemaUtils.createMissingTablesAndColumns() çağırın — bu, geliştirme için güvenli bir geçiş işlemidir. Üretim ortamında Flyway veya Liquibase gibi bir geçiş aracı kullanın.

transaction {
    SchemaUtils.createMissingTablesAndColumns(Users, Posts, Orders)
}

Hızlı Kontrol

Exposed'ın Table DSL'sinde Posts.authorId ile Users.id arasında yabancı anahtarı nasıl tanımlarsınız?

Özet: Table DSL'si ile Tabloları Tanımlama

Önemli noktalar:

  • Tablolar, Table, LongIdTable vb. sınıfları genişleten object nesneleridir
  • Sütunlar: varchar, integer, long, bool, datetime, uuid vb.
  • .nullable(), .default(), .uniqueIndex(), .references() sütunları değiştirir
  • Bileşik birincil anahtarlar: PrimaryKey(col1, col2)
  • Şemayı SchemaUtils.create() veya createMissingTablesAndColumns() ile uygulayın
Başlamak ücretsiz

Yapay zeka eğitmeniyle Kotlin öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“Table DSL ile Tablolar Tanımlama” dersi ücretsiz mi?

Evet — “Table DSL ile Tablolar Tanımlama” 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 Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Table DSL ile Tablolar Tanımlama” dersinde ne öğreneceğim?

Sütunlar, birincil anahtarlar ve yabancı anahtarlarla türlendirilmiş tablo şemaları tanımlayın. Kotlin 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.

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

Önceden deneyim gerekmez. CoddyKit'te Kotlin 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 2. dersidir.

“Table DSL ile Tablolar Tanımlama” 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 Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin 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. Exposed Kurulumu: Veritabanı Bağlantısı ve İşlem DSL'i
  2. Table DSL ile Tablolar Tanımlama
  3. Query DSL ile CRUD: insert, select, update, delete
  4. Exposed DAO: Varlık Sınıfları ve İlişkiler
← Kotlin Academy Sayfasına Dön