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 аркылуу байланышкан маалыматтарды алууга мүмкүндүк берет.