Un ORM, por sus siglas al inglés: Object Relational Mappper, no es más que una pieza de software que nos permite interactuar con nuestra base de datos sin la necesidad de conocer SQL (El lenguaje de consultas). Todo esto utilizando el paradigma de programación orientada a objetos. 🥳
Para todos aquellos desarrolladores Backend, el reto no es solo procesar y aplicar reglas de negocio a la información obtenida, sino también obtener la información misma.
Esto puede llegar a ser algo complicado en equipos de desarrollo pequeños, donde, muy probablemente, no exista algún administrador de base de datos que nos facilite la creación de nuestra base de datos o la creación de sentencias SQL para nuestras consultas. Por lo tanto queda del desarrollador mismo a prender, no sólo el lenguaje utilizado Backend, si no además, SQL. 😮
Aprender SQL no está para nada mal, y de hecho lo recomiendo ampliamente, pero para todas aquellas personas que están comenzando en el mundo de la programación, o simplemente quieren agilizar el proceso de desarrollo y no quieren complicarse tanto aprendiendo una nueva tecnología, les tengo una muy buena noticia. Nos podemos apoyar de los ORMs.
Tal y como mencionamos anteriormente, un ORM nos permitirá interactuar con nuestra base de datos sin la necesidad de conocer SQL. Todo mediante programación orientada a objetos.
Actualmente en el mercado existen diferentes ORMs tanto para lenguajes de programación como para frameworks mismos, Los más populares, desde mi experiencia, son:
- Active Record (Ruby)
- Eloquent (PHP)
- Peewee (Python)
- SQLAlchemy (Python)
- Entity Framework (C#)
- Hibernate (Java)
Los ORMs se encarga de traducir nuestra instrucción en el lenguaje de programación que estemos utilizando a una sentencia SQL que el gestor de base de datos pueda entender.
Veamos un ejemplo.
Que pasa si deseamos obtener el id, username, email para nuestro usuarios con id número 110.
Utilizando una base de datos relacional, MySQL por ejemplo. Nuestra consulta quedaría de la siguiente manera:
SELECT id, username, email FROM id = 101:
Una sentencia bastante sencilla, Ahora, Utilizando el active record de ruby on rails, la consulta pudierá quedar de la siguiente manera.
User.where(id:101).select(:id, :username, :email)
Cómo puedes observar, ahora estamos utilizando programación orientada a objetos. Nos apoyamos en una clase, métodos y atributos.
Si utilizamos otro ORM, por ejemplo peewee de Python, la consulta sería diferente, pero obtendremos el mismo resultado.
User.select(User.id, User.username, User.email).where(User.id == 101)
Por supuesto, los ORM no solo están diseñados para obtener información, también podemos crear, actualizar, eliminar y procesar registros, tablas o base de datos.
Aquí un ejemplo de como crear un registro con el Active record.
User.create(username:'eduardogpg', email:'eduardocodigofacilito.com')
Esto se traduce a:
INSERT INTO "users" ("username", "email", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["username", "eduardogpg"], ["email", "eduardocodigofacilito.com"], ["created_at", "2021-01-19 19:13:13.622475"], ["updated_at", "2021-01-19 19:13:13.622475"]]
Cada ORM es bastante legible para el lenguaje para el que fue diseñado. Y esto nos lleva a que hablemos de las ventajas de utilizar un ORM.
Ventajas 👍
Hablemos ahora de las ventajas que nos puede ofrece el uso de un ORM.
- La primera ventaja en esta lista, y quizás la más importante, es que al utilizar un ORM, como estos se encuentran diseñados para un lenguaje en particular, no debemos preocuparnos tanto por conocer y dominar SQL. Lo cual nos permite enfocarnos al cien por ciento en el lenguaje que estemos utilizando del lado del backend. Java, PHP, Python, etc …
-
Otra ventaja es que, la mayoría de los ORMs nos permiten interactuar con diferentes gestores de base de datos, pudiendo así, en dado caso lo llegáramos a necesitar, cambiar de un gestor a otro sin muchos problemas.
por ejemplo, imaginemos que nos encontramos en un proyecto donde actualmente estamos utilizando Oracle como gestor de base de datos, pero por temas administrativos debemos migrar a MySQL. Si utilizamos un ORM el cambio no debería ser gran problema, sería cuestión de modificar la configuración, quizás instalar Drives y listo. Nuevo gestor, y la aplicación sigue funcionando.
- Otra ventaja es que, dependiendo del ORM, podemos llegar a utilizar transacciones, migraciones, triggers e inclusive la posibilidad de trabajar con vistas o store procedures, conceptos un poco más avanzados en el mundo de base de datos. Todo esto, reitero, sin la necesidad de conocer el lenguaje de consultas.
Desventajas 👎
Ya hablamos de las ventajas, toca el turno de hablar sobre las desventajas de utilizar ORMs, por que sí, también las hay.
- Para consultas complejas, que involucran múltiples tablas, condiciones e inclusive operaciones, es posible que el ORM no llegue a generar las sentencias más óptimas para el gestor, o inclusive se torne aún más complejo crear la consulta utilizando objetos que utilizando el mismo SQL. En esos casos deberíamos optar por obtener la información directamente de la base de datos y posteriormente generar los objetos a partir de ella. Vaya, un doble trabajo.
- Dependiendo del ORM, es posible que las configuraciones sean un poco tediosas. Teniendo que importar, instalar, actualizar, generar nuevos archivos etc…
- Y ahora, quizás la mayor desventaja de todas. Si no tenemos ningún tipo de conocimientos con SQL y dependemos completamente de un ORM, muy probablemente no lleguemos a comprender al cien por ciento las sentencias que estamos creando y ejecutando. Que si bien esto a corto plazo nos permitirá agilizar el proceso de desarrollo, a la larga puede no sonar a una muy buena idea; ya que carecemos de los conocimientos necesarios en el área de base de datos, y al tratar de crear nuestras propias consultas directamente en algún gestor, puede que se nos sea complicado o, inclusive, imposible.
Por lo tanto les recomiendo no abusar de los ORMs. Intentemos utilizarlos a la par que aprendemos SQL.
Conclusión
En conclusión, los ORMS nos serán de mucha utilidad para el proceso de desarrollo, pudiendo así interactuar fácilmente con nuestra base de datos, esto sin tener grandes conocimientos de SQL.
Que si bien es cierto, conocer SQL es una excelente idea, y lo recomiendo ampliamente, no debemos dejar a un lado la facilidad y flexibilidad que los ORMs nos ofrece. Vaya son una excelente herramienta para el desarrollo.
Creo que la forma más equilibrada de utilizar un ORM es siempre intentar conocer como funcionan las sentencias que estamos creando y ejecutando, de esta manera agilizaremos nuestro desarrollo y estaremos en constante aprendizaje en el área de base de datos. Un ganar ganar. 🤠
-
Módulo 1 | 7 clases
Introducción
expand_more-
play_circle_outline
Clase 1
Introducción al curso
-
play_arrow
Clase 2
¿Qué es un ORM?
-
play_circle_outline
Clase 3
Crear proyecto
-
play_circle_outline
Clase 4
Configuración de base de datos
-
play_circle_outline
Clase 5
Generar primera migración
-
play_circle_outline
Clase 6
Anotaciones
-
play_circle_outline
Clase 7
Rollbacks
-
-
Módulo 2 | 30 clases
Modelos
expand_more-
play_circle_outline
Clase 1
Crear nuevo objeto
-
play_circle_outline
Clase 2
Callbacks
-
play_circle_outline
Clase 3
Callbacks Parte 2
-
play_circle_outline
Clase 4
Callbacks Ruby on Rails
-
play_circle_outline
Clase 5
Validaciones
-
play_circle_outline
Clase 6
Validaciones pt2
-
play_circle_outline
Clase 7
Validaciones pt3
-
play_circle_outline
Clase 8
Validaciones pt4
-
play_circle_outline
Clase 9
validaciones Ruby on Rails
-
play_circle_outline
Clase 10
Validaciones propias
-
play_circle_outline
Clase 11
Validaciones propias pt2
-
play_circle_outline
Clase 12
Obtener elementos
-
play_circle_outline
Clase 13
Condiciones
-
play_circle_outline
Clase 14
Operador logico or
-
play_circle_outline
Clase 15
Operadores relacionales
-
play_circle_outline
Clase 16
Busqueda por id
-
play_circle_outline
Clase 17
Busqueda por columnas
-
play_circle_outline
Clase 18
Limit
-
play_circle_outline
Clase 19
Existencia de elementos
-
play_circle_outline
Clase 20
Selecionar columnas
-
play_circle_outline
Clase 21
First or create
-
play_circle_outline
Clase 22
Scopes
-
play_circle_outline
Clase 23
Scopes pt2
-
play_circle_outline
Clase 24
Actualizar registros
-
play_circle_outline
Clase 25
Actualizar registros pt2
-
play_circle_outline
Clase 26
Actualizar registros pt3
-
play_circle_outline
Clase 27
Actualizar registros pt4
-
play_circle_outline
Clase 28
Eliminar registros
-
play_circle_outline
Clase 29
Monitorear cambios
-
play_circle_outline
Clase 30
Monitorear cambios pt2
-
-
Módulo 3 | 15 clases
Relaciones
expand_more-
play_circle_outline
Clase 1
Modelo carrito de compras
-
play_circle_outline
Clase 2
Relación uno a muchos
-
play_circle_outline
Clase 3
Relación uno a uno
-
play_circle_outline
Clase 4
Añadir nuevo campo
-
play_circle_outline
Clase 5
Relación muchos a muchos
-
play_circle_outline
Clase 6
Listar productos
-
play_circle_outline
Clase 7
Includes
-
play_circle_outline
Clase 8
Calcular total
-
play_circle_outline
Clase 9
Through
-
play_circle_outline
Clase 10
Joins
-
play_circle_outline
Clase 11
Group by
-
play_circle_outline
Clase 12
Left Join
-
play_circle_outline
Clase 13
Actualizar carrito de compras
-
play_circle_outline
Clase 14
Múltiples productos
-
play_circle_outline
Clase 15
Múltiples productos pt2
-
-
Módulo 4 | 9 clases
Extras
expand_more-
play_circle_outline
Clase 1
Diagramas
-
play_circle_outline
Clase 2
Reload
-
play_circle_outline
Clase 3
Enums
-
play_circle_outline
Clase 4
Transacciones
-
play_circle_outline
Clase 5
Locks
-
play_circle_outline
Clase 6
Maquina de estados
-
play_circle_outline
Clase 7
Estados de un carrito de compras
-
play_circle_outline
Clase 8
Maquina de estados pt2
-
play_circle_outline
Clase 9
Callbacks Maquina de estados
-