Sobes.tech
Junior

¿Qué base de datos utilizas en tus proyectos?

sobes.tech AI

Respuesta de la IA

He utilizado varias opciones, dependiendo de los requisitos del proyecto:

  • Biblioteca Persistente de Habitaciones: La más utilizada. Proporciona una capa abstracta conveniente sobre SQLite, reduciendo significativamente la cantidad de código repetitivo y asegurando la verificación de consultas en tiempo de compilación. Es ideal para la mayoría de los escenarios típicos de aplicaciones Android.
  • SQLite directamente: En proyectos antiguos o cuando se requiere acceso de bajo nivel y control total sobre esquemas y consultas. Requiere más trabajo manual.
  • Realm: En varios proyectos donde la rendimiento para manejar grandes volúmenes de datos y objetos complejos era importante. Realm es una base de datos orientada a objetos, lo que resulta conveniente al trabajar con modelos de datos.
  • Firebase Realtime Database / Cloud Firestore: Para proyectos que necesitan sincronización de datos en tiempo real entre dispositivos y almacenamiento en la nube. La elección entre ellos dependía de la estructura de datos y las necesidades de consultas. Realtime Database es adecuada para datos en forma de árbol JSON, mientras que Cloud Firestore para colecciones de documentos.

La elección de una base de datos específica se determina por factores como:

  • Volumen y tipo de datos.
  • Complejidad de las consultas.
  • Requisitos de rendimiento.
  • Necesidad de sincronización de datos.
  • Nivel de experiencia del equipo.
  • Disponibilidad de soluciones y bibliotecas existentes.

Por ejemplo, una implementación típica con Room incluye:

// entidad
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    val name: String
)

// dao
@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAll(): Flow<List<User>>

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insert(user: User)
}

// base de datos
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}