Sobes.tech
Junior

Que base de dados utilizas nos teus projetos?

sobes.tech IA

Resposta da IA

Utilizei várias opções, dependendo dos requisitos do projeto:

  • Biblioteca Persistente de Room: A mais comum. Fornece uma camada abstrata conveniente sobre SQLite, reduzindo significativamente a quantidade de código repetitivo e garantindo a verificação de consultas na fase de compilação. Ideal para a maioria dos cenários típicos de aplicações Android.
  • SQLite diretamente: Em projetos antigos ou quando era necessário acesso de baixo nível e controle total sobre esquemas e consultas. Requer mais trabalho manual.
  • Realm: Em vários projetos onde a performance para lidar com grandes volumes de dados e objetos complexos era importante. Realm é um banco de dados orientado a objetos, o que é conveniente ao trabalhar com modelos de dados.
  • Firebase Realtime Database / Cloud Firestore: Para projetos que requerem sincronização de dados em tempo real entre dispositivos e armazenamento na nuvem. A escolha entre eles dependia da estrutura de dados e das necessidades de consultas. Realtime Database é adequado para dados em forma de árvore JSON, enquanto Cloud Firestore para coleções de documentos.

A escolha de uma base de dados específica é determinada por fatores como:

  • Volume e tipo de dados.
  • Complexidade das consultas.
  • Requisitos de desempenho.
  • Necessidade de sincronização de dados.
  • Nível de experiência da equipe.
  • Disponibilidade de soluções e bibliotecas existentes.

Por exemplo, uma implementação típica com Room inclui:

// entidade
@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)
}

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