0Pricing
Android Academy · Lección

Consultas y relaciones

Consulte datos y relacione entidades

Consultas y relaciones es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.

Más allá de una sola tabla

Las aplicaciones reales tienen datos relacionados: un usuario tiene muchas publicaciones y un pedido tiene muchos artículos. Room los modela mediante claves externas y la anotación @Relation.

Consultas parametrizadas

Pase argumentos a un @Query mediante el prefijo de dos puntos.

@Query("SELECT * FROM users WHERE name LIKE :search")
suspend fun search(search: String): List<User>

Devolver valores agregados

Las consultas pueden devolver valores escalares, como recuentos.

@Query("SELECT COUNT(*) FROM users")
suspend fun count(): Int

Definir una clave externa

Una entidad hija hace referencia a su entidad principal mediante @ForeignKey. Esto garantiza la integridad referencial en el nivel de la base de datos.

@Entity(
    foreignKeys = [ForeignKey(
        entity = User::class,
        parentColumns = ["id"],
        childColumns = ["userId"]
    )]
)
data class Post(
    @PrimaryKey val id: Int,
    val userId: Int,
    val title: String
)

Indexar las claves externas

Room recomienda indexar las columnas de claves externas para mejorar el rendimiento de las consultas. Añada un @Index.

@Entity(
    indices = [Index("userId")]
)
data class Post(/* ... */ val userId: Int)

Comportamiento de onDelete

Decida qué ocurre con las entidades hijas cuando se elimina la entidad principal; por ejemplo, use CASCADE para eliminarlas también.

ForeignKey(
    entity = User::class,
    parentColumns = ["id"],
    childColumns = ["userId"],
    onDelete = ForeignKey.CASCADE
)

Modelar una relación uno a muchos

Cree una clase que combine una entidad principal con sus entidades hijas mediante @Embedded y @Relation.

data class UserWithPosts(
    @Embedded val user: User,
    @Relation(
        parentColumn = "id",
        entityColumn = "userId"
    )
    val posts: List<Post>
)

Consultar la relación

Devuelva la clase combinada desde un DAO. Room ejecuta la consulta adicional y ensambla los objetos.

@Transaction
@Query("SELECT * FROM users")
suspend fun getUsersWithPosts(): List<UserWithPosts>

Por qué usar @Transaction aquí

Como Room ejecuta dos consultas (primero los padres y después los hijos), envolver el método en @Transaction garantiza una instantánea coherente sin escrituras intercaladas.

Relación muchos a muchos con una tabla intermedia

Para una relación muchos a muchos (estudiantes y cursos), use una tabla intermedia y el parámetro associateBy de @Relation.

@Relation(
    parentColumn = "studentId",
    entityColumn = "courseId",
    associateBy = Junction(Enrollment::class)
)
val courses: List<Course>

Resumen de las relaciones

  • @ForeignKey aplica la integridad y las reglas de eliminación en cascada.
  • @Relation + @Embedded ensamblan objetos relacionados.
  • @Transaction mantiene la coherencia de las lecturas que realizan varias consultas.

Comprobación rápida

Compruebe cuánto entiende las relaciones.

Repaso

Ha aprendido lo siguiente:

  • Parametrizar consultas con :name y devolver agregados.
  • @ForeignKey aplica la integridad mediante reglas onDelete.
  • @Relation + @Embedded construyen objetos relacionados; envuelva las lecturas en @Transaction.

Preguntas frecuentes

¿La lección «Consultas y relaciones» es gratis?

Sí — el texto completo de «Consultas y relaciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Consultas y relaciones»?

Consulte datos y relacione entidades Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Android Academy?

No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Consultas y relaciones»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Android Academy?

Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Entidades y DAOs
  2. La clase de base de datos Room
  3. Consultas y relaciones
  4. Observar datos con Flow
← Volver a Android Academy