Cualquier software se desarrolla para un área temática específica. Por ejemplo:
- Un sistema de análisis utiliza conceptos como "vista", "sesión", "embudo" y etc.
- En una tienda online, los conceptos serán diferentes: "producto", "categoría" y etc.
Todo esto forma lo que llamamos la ontología del área temática. A veces, se menciona el término modelo del área temática, que es sinónimo de ontología.
Además de los conceptos, la ontología también describe las relaciones entre ellos. Por ejemplo, la entidad "Usuario" se relaciona con "Compra" en una relación de "uno a muchos". Esto significa que un usuario puede realizar varias compras, pero cada compra pertenece a un solo usuario.
El modelo del área temática es fundamental para la comunicación y el entendimiento entre los miembros del equipo. No depende del lenguaje de programación ni de la programación en sí.
No importa quién esté comunicando: ya sean programadores entre sí, o programadores hablando con clientes, gestores o diseñadores. Todos trabajan con las entidades, las relaciones y las reglas de negocio del área temática. Por ejemplo, estas reglas pueden incluir descuentos automáticos en pedidos que superen cierto volumen de productos.
Es importante entender que el modelo solo refleja una parte del área temática con un cierto nivel de detalle. Además, diferentes programas de distintos productores pueden tener modelos diferentes, incluso si pertenecen al mismo campo. En algunas áreas, como la contabilidad, hay un conjunto fijo de entidades, relaciones y reglas de trabajo. Sin embargo, en áreas menos formales, hay aún más oportunidades para la variación.
Veamos algunos ejemplos de Códica. Aquí, el número de entidades supera las cien, y el número de relaciones se cuenta por cientos, con muchas reglas adicionales que también son difíciles de enumerar.
Basado en el modelo del área temática, se forma el modelo de datos en el código. Creamos las entidades y definimos sus relaciones. Luego, construimos el código que opera con estas entidades, siguiendo los requerimientos y reglas de negocio.
En esta etapa surge la pregunta: ¿cómo se reflejarán estas entidades en la base de datos donde se almacenan?
La opción más sencilla es crear una tabla para cada entidad y vincularlas a través de claves externas. En la mayoría de los proyectos, esta es la práctica común. Para esto, se utiliza un ORM (Object-Relational Mapper), que es un framework para gestionar datos.
Con el ORM, se describen las entidades y sus relaciones, definiendo también cómo se mapearán en la base de datos, generalmente de forma semi-automática. El ORM se encarga de gran parte del trabajo, como:
- Generar consultas SQL.
- Extraer datos.
- Convertir tipos de la base de datos a los tipos del lenguaje de programación y viceversa.
- Extraer automáticamente las relaciones.
Como resultado, el ORM oculta la complejidad del trabajo con la base de datos. Solo se necesita una configuración adecuada por parte del programador, y el ORM realiza todas las consultas necesarias por sí mismo. En casos más complicados, puede que aún tengas que escribir algunas consultas manualmente, pero esto no es tan difícil, ya que los ORM suelen incluir un constructor de consultas que facilita la generación de SQL.
En el ecosistema de Python, hay varios ORM. Algunos fueron desarrollados para frameworks específicos y se incluyen con ellos, mientras que otros son completamente independientes. Ahora, veamos un ejemplo implementado con Django ORM.
Definición de la entidad Photo:
from django.db import models
class Photo(models.Model):
title = models.CharField(max_length=200)
image = models.ImageField()
slug = models.SlugField()
Uso:
# obtenemos objetos de la base de datos
photos = Photo.objects.all()
# los pasamos a la plantilla
render(request, 'polls/detail.html', {'photos': photos})
El código que describe la entidad puede parecer simple, pero en realidad, el grado de automatización en Django ORM es muy alto. Detrás de este código aparentemente sencillo, se oculta la creación de la entidad en la base de datos y un conjunto de comprobaciones de los valores que introduces en el modelo.
Antes de empezar a trabajar con el ORM, es fundamental aprender primero los conceptos básicos de las bases de datos. Esto no debe hacerse a través de la programación, sino mediante el trabajo directo con la base de datos. También es importante familiarizarse con:
- Normalización
- Claves externas y primarias
- Índices
- Plan de consulta
- Lenguaje SQL, para modificar las estructuras de la base de datos y manipular datos
Una vez que tengas estos conocimientos, podrás pasar al nivel de ejecutar consultas desde el lenguaje de programación. En Python, puedes utilizar diferentes bibliotecas como postgres para esto. Solo después de dominar estos conceptos deberías comenzar a utilizar el ORM. Estos temas se abordarán más adelante en los cursos.
Estos son solo algunos de los temas involucrados en el código mencionado:
- Modelo entidad-relación
- Diseño guiado por el dominio
- ActiveRecord / DataMapper
- Mapa de identidad
- Migraciones
- Validación
- Metaprogramación
Materiales adicionales
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.