Creación, actualización y eliminación de datos en bases de datos
Clase 30 de 36 • Curso de Scala básico
Resumen
¿Cómo se realiza la creación, actualización y eliminación de datos en bases de datos funcionales?
Cuando trabajamos con bases de datos en el ámbito de la programación funcional, encontramos métodos que difieren de los métodos tradicionales al tratar con datos. Este enfoque se centra en la creación dinámica y detallada de operaciones que pueden ejecutarse posteriormente. A continuación, exploraremos estas operaciones esenciales: la creación, actualización y eliminación de datos.
¿Cómo crear un nuevo registro?
La inserción de datos en una base de datos funcional se realiza a través de una operación que no se ejecuta inmediatamente, sino que se prepara para ser ejecutada cuando sea requerida. Este proceso se describe de manera detallada y luego se ejecuta mediante ciertas funciones de la base de datos.
- Definición de operación de inserción:
- Se describe bajo el esquema
mugiquery
con una sintaxis especial de+=
, permitiendo la inserción del dato a la derecha. - El dato a insertar se define como un objeto del modelo específico, por ejemplo,
Movie
, que será luego convertido en una acción de inserción.
- Se describe bajo el esquema
// Ejemplo de cómo definir una inserción:
val insert = movieQuery += movieInstance
- Ejecución de la operación:
- La operación se ejecuta utilizando una función como
db.run()
, aplicándola sobre la descripción creada anteriormente. - Devuelve un futuro que indica la cantidad de datos insertados, aunque usualmente el objetivo es obtener el objeto final insertado.
- La operación se ejecuta utilizando una función como
// Ejemplo de ejecución de la inserción:
db.run(insert)
- Obtener el resultado de la inserción:
- Se usa
FlatMap
junto con una función de consultaget 1
para recuperar el objeto insertado.
- Se usa
¿Cómo se actualiza un registro existente?
Actualizar datos implica más que simplemente modificar valores; requerimos asegurar la correspondencia de ID y datos a nivel de la base de datos antes de aplicar cambios.
- Consulta y comparación de datos:
- Se realiza una consulta preliminar para verificar que el ID del objeto a actualizar coincida con el ID que proporciona el usuario.
// Ejemplo de filtro para coincidencia de IDs:
val query = movieQuery.filter(_.id === movieId)
- Descripción y ejecución de la actualización:
- Similar a la creación, se prepara una descripción de la operación de actualización que luego se ejecuta.
- La reutilización de la consulta inicial permite verificar y aplicar la actualización.
// Ejecución de actualización:
val updateAction = query.update(movieToUpdate)
db.run(updateAction)
¿Cómo se elimina un registro?
La eliminación se simplifica al seguir los pasos comunes de consulta pero, en lugar de recuperar datos, se procede con la eliminación específica y controlada.
- Consulta previa a la eliminación:
- Es necesario realizar la consulta para almacenar el resultado del objeto a eliminar, permitiéndonos luego eliminarlo y a la vez recuperar qué elemento fue eliminado.
// Ejemplo de consulta:
val query = movieQuery.filter(_.id === movieId)
db.run(query.result.headOption)
- Ejecución de la eliminación:
- Utilizando
fork comprehension
, ejecutamos la eliminación tras obtener el objeto, permitiendo así devolver el elemento eliminado incluso sin interés en el resultado de la operación de eliminación.
- Utilizando
// Ejecución de eliminación usando fork comprehension:
val deleteAction = for {
movie <- db.run(query.result.headOption)
_ <- db.run(query.delete)
} yield movie
Estas operaciones nos ofrecen un control y flexibilidad mejorados al manipular datos en bases de datos funcionales. Al comprender y aplicar estas técnicas, podemos optimizar el manejo de datos en nuestras aplicaciones, garantizando integridad y eficiencia. ¡Adelante, exploradores de la programación funcional! Continuar indagando sobre computación paralela será el próximo desafío para optimizar aún más estos procesos.