Sobes.tech
Junior — Middle

Room kullanan bir veritabanında iki tablo arasında nasıl bağlantı kurulur?

sobes.tech yapay zeka

AI'dan gelen yanıt

Room'da, iki tablo arasındaki ilişki, dış anahtarlar ve anotasyonlar ile ayrıca verileri birleştirmek için özel sınıflar kullanılarak kurulur.

  1. Dış Anahtar (Foreign Key) — varlıkta (Entity), @ForeignKey anotasyonu ile başka bir tablonun birincil anahtarına referans veren bir alan gösterirsiniz.

  2. İlişkiler — ilişkili verileri almak için, @Relation anotasyonlarıyla POJO sınıfları oluşturulur ve bu sınıflar ilişkili tablolardan iç içe nesneler almanıza olanak tanır.

"Birden çoğa" ilişkisi örneği:

@Entity
data class User(
    @PrimaryKey val userId: Int,
    val name: String
)

@Entity(
    foreignKeys = [ForeignKey(
        entity = User::class,
        parentColumns = ["userId"],
        childColumns = ["userOwnerId"],
        onDelete = ForeignKey.CASCADE
    )]
)
data class Book(
    @PrimaryKey val bookId: Int,
    val title: String,
    val userOwnerId: Int // dış anahtar
)

// Kullanıcı ve onun kitaplarını almak için sınıf
data class UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

Bu şekilde, Room tabloları otomatik olarak bağlar ve DAO aracılığıyla ilişkili verileri almanıza olanak tanır.