Qué es un modelo de software
Un modelo de software es un dibujo que muestra las partes de un sistema y cómo se relacionan, sin entrar en el código. Dibujarlo ayuda a encontrar errores de diseño antes de programar.
Aquí los dibujos se escriben como texto con Mermaid, y la página los convierte en diagramas. Un diagrama se puede cambiar, corregir y guardar como cualquier otro archivo.
Al terminar esta lección
Nota
Puedo dibujar un modelo de un sistema con un diagrama.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Modelo | un dibujo simple de las partes de un sistema | |
| Entidad | una cosa del sistema de la que se guardan datos | Reserva |
| Relación | el vínculo entre dos entidades | hace |
| Cardinalidad | cuántas de una entidad se unen a cuántas de otra | 1 a muchas |
| Diagrama de secuencia | los mensajes entre partes, en el orden en que ocurren | |
| Mermaid | texto que la página dibuja como diagrama |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un modelo muestra entidades y relaciones
Una entidad es una cosa de la que el sistema guarda datos: estudiante, sala, reserva. Se dibuja como una caja con su nombre.
Una relación une dos cajas con una línea y un verbo. La cardinalidad dice cuántas hay de cada lado: un estudiante hace muchas reservas, y cada reserva es de un solo estudiante.
Cómo se lee ese diagrama
El diagrama tiene tres cajas: Estudiante, Sala y Reserva. Cada flecha se lee como una frase.
Un estudiante hace muchas reservas. Una sala recibe muchas reservas. El 1 y el asterisco son la cardinalidad: uno de un lado y muchos del otro.
Un diagrama de secuencia ordena los mensajes
Las cajas no dicen qué pasa primero. Para eso sirve un diagrama de secuencia. Cada parte tiene una línea vertical, y los mensajes bajan en el orden en que ocurren.
El de abajo cuenta lo que pasa cuando una estudiante reserva una sala desde el móvil.
Un error frecuente
Advertencia
Mucha gente cree que un buen modelo debe mostrar todo el sistema. Un dibujo con todo no lo lee nadie. Dibuja solo lo que ayuda a responder la pregunta que tienes ahora, y deja el resto fuera.
Lee el modelo del sistema real
Un modelo también se puede sacar de un sistema que ya existe. La base de datos guarda la lista de sus columnas, y una consulta la puede leer.
Los comandos crean dos tablas, rooms y bookings, donde cada reserva apunta a una sala. Después piden las columnas de bookings y prueban una reserva de una sala que no existe. Primero da a psql la contraseña.
Dar a psql la contraseña
export PGPASSWORD=shopSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Crear las tablas rooms y bookings
psql -h db -U shop -c "drop table if exists bookings; drop table if exists rooms; create table rooms (code text primary key, seats int not null); create table bookings (id serial primary key, room text not null references rooms (code), student text not null, hour int not null check (hour between 8 and 20), status text not null default 'confirmed', unique (room, hour)); insert into rooms values ('A1', 4), ('B2', 8); insert into bookings (room, student, hour) values ('A1', 'Lucia', 9), ('B2', 'Irene', 9); notify pgrst, 'reload schema'"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pedir las columnas de bookings
psql -h db -U shop -c "select column_name, data_type from information_schema.columns where table_name = 'bookings' order by ordinal_position"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Reservar una sala que no existe
curl -s -w "\n%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"room":"Z9","student":"Nora","hour":10}' "http://api:3000/bookings"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejemplo resuelto: del sistema al modelo
| Lo que viste | Qué dibujas |
|---|---|
| Dos tablas, rooms y bookings | Dos cajas: Sala y Reserva |
| La columna room de bookings apunta a rooms | Una línea de Reserva a Sala con la cardinalidad "muchas a una" |
| La API rechaza la sala Z9 con un 409 | Una reserva siempre pertenece a una sala que existe |
| Las columnas id, room, student, hour y status | Los datos que lleva la caja Reserva |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.