Sobes.tech
Junior — Middle

როგორ დავამყაროთ კავშირი ორ ცხრილს შორის მონაცემთა ბაზაში, რომელიც იყენებს Room-ს?

sobes.tech AI

პასუხი AI-სგან

Room-ში, ორი ცხრილის შორის კავშირი დამყარებულია საგარეო გასაღებებით და ანოტაციებით, ასევე სპეციალური კლასების გამოყენებით მონაცემების გაერთიანებისთვის.

  1. გარე გასაღები (Foreign Key) — არსებაში (Entity) აღნიშნავთ ველს ანოტაციით @ForeignKey, რომელიც მიუთითებს სხვა ცხრილის პირველკლავზე.

  2. მიმართულებები — დაკავშირებული მონაცემების მისაღებად, ქმნიან POJO კლასებს @Relation ანოტაციით, რომლებიც საშუალებას აძლევენ ჩაშენებულ ობიექტებს დაკავშირებული ცხრილებიდან მიიღონ.

"ერთი-სამი" ურთიერთობის მაგალითი:

@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 // საგარეო გასაღები
)

// კლასი მომხმარებლის და მისი წიგნების მისაღებად
data class UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

ამ გზით, Room ავტომატურად კავშირებს ტაბლებს და საშუალებას აძლევს DAO-ის მეშვეობით მიიღოთ დაკავშირებული მონაცემები.