Cuando trabajamos con una base de datos, una de las partes más complicadas es la que llamamos normalización.
Llamamos normalización al proceso a través del cual restructuramos nuestra base de datos de manera que se cumplan una serie de normas, cuyo objetivo es el de reducir la repetición de información y proteger la integridad de los datos.
En términos prácticos, una base de datos propiamente estructurada y normalizada, nos permite escribir consultas mejor elaboradas, con mejor rendimiento, con menos redundancia, etc.
Parte del proceso de normalización requiere que definamos relaciones entre los datos de nuestra base de datos, un ejemplo de este tipo de relaciones es la que se establece entre los mensajes del chat y un usuario. Al ver la interfaz de una aplicación de mensajería, podemos por ejemplo distinguir qué mensajes le pertenecen a qué usuario y cuáles le pertenecen a otro.
Al ingresar a un sitio de ventas en línea podemos usar controles para seleccionar productos que pertenezcan a una categoría, en un canal de YouTube podemos distinguir suscriptores que le pertenecen a un canal, y de otra manera, los canales a los que está suscrito un usuario, todos estos son ejemplos de relaciones que existen entre la información que maneja una plataforma.
Definir apropiadamente estas relaciones, es parte importante del proceso de normalización, ya que es a través de estas relaciones que evitamos que la información se repita y que podamos obtener o consultar la información que queremos. Como por ejemplo, que podamos consultar los mensajes de chat de un usuario, los canales a los que está suscrito, etc.
En general, podemos distinguir dos tipos principales de relaciones en una base de datos.
Primero, las relaciones uno a muchos, o de pertenencia, estas se establecen cuando una serie de entidades le pertenecen a otra entidad, por ejemplo, los mensajes de chat son entidades que le pertenecen a la entidad de un usuario. Aquí lo importante es saber que una colección le pertenece a un elemento individual, como una serie de artículos que le pertenecen a un autor.
El segundo grupo de relaciones es al que llamamos Muchos a Muchos, según la terminología que definimos en el ejemplo anterior, estas relaciones se dan cuando una colección de entidades están relacionados con una o más de otro grupo de entidades.
Este tipo de relación es más difícil de conceptualizar, pero un ejemplo muy simple es el de los suscriptores de YouTube. Decimos que la relación que existe entre suscriptores y canales es de muchos a muchos, porque si bien un canal puede tener muchos suscriptores, un suscriptor puede también estar suscrito a muchos canales. Es decir, muchos a muchos.
La diferencia entre ambos está en el sentir de pertenencia, mientras que en la relación uno a muchos, la colección le pertenece al usuario, en los muchos a muchos no hay una pertenencia, simplemente yo puedo tener muchos de estos, y a la vez, tú puedes tener muchos como yo.
En la base de datos, ambas relaciones se definen de maneras distintas, por un lado, las relaciones uno a muchos suelen definirse vía un campo en las entidades de la colección al que llamamos llave foránea, que es equivalente a algún campo de la entidad individual a la que pertenece la colección. Si pensamoes en los artículos que le pertenecen a un autor, esto significa que como parte de la tabla que guarda los artículos, definimos un campo especial que guarda a qué autor pertenecen estos artículos. Lo mismo con los mensajes de chat que bajo esta idea, guardarían un campo especial para saber qué usuario los escribió.
Las relaciones muchos a muchos, por su parte, suelen involucrar una tabla intermedia que establece la relación. Si tenemos una tabla usuarios y una tabla canales, y queremos establecer una relación muchos a muchos, podríamos crear una tabla intermedia entre ambos, donde cada registro establece una relación entre una entidad de la tabla usuarios y una entidad de la tabla canales.
Supongamos que llamamos a esta tabla suscripciones, y en ella definimos un campo para guardar una referencia a un usuario, y además, otro campo que guarde una referencia a algún canal.
Eventualmente, esta tabla nos va a servir qué usuarios están suscritos a un canal, más adelante en el curso veremos qué clase de consultas necesitamos hacer para poder conocer esta información.
Recuerda que puedes reforzar el conocimiento que adquieres de bases de datos, siguiendo el curso dedicado a este tema en codigofacilito.com/cursos/base-datos-profesional donde detallamos operaciones de consulta que puedes realizar.
-
Módulo 1 | 8 clases
Introducción
expand_more-
play_circle_outline
Clase 1
Introducción al Curso Profesional de Backend
-
play_circle_outline
Clase 2
Backend y Frontend
-
play_circle_outline
Clase 3
La especialidad Backend
-
play_circle_outline
Clase 4
Qué veremos en este curso
-
play_circle_outline
Clase 5
Conocimientos previos
-
play_circle_outline
Clase 6
Stack de Tecnologías
-
play_circle_outline
Clase 7
Configurar entorno de trabajo (Windows)
-
play_circle_outline
Clase 8
Configurar entorno de trabajo (MacOS)
-
-
Módulo 2 | 19 clases
Http
expand_more-
play_circle_outline
Clase 1
Cómo funciona un servidor web
-
play_circle_outline
Clase 2
Qué es NodeJS y qué es Express
-
play_circle_outline
Clase 3
El protocolo Http
-
play_circle_outline
Clase 4
Verbos Http
-
play_circle_outline
Clase 5
Http con cURL
-
play_circle_outline
Clase 6
Direcciones web
-
play_circle_outline
Clase 7
Creando nuestro primer servidor
-
play_circle_outline
Clase 8
Express
-
play_circle_outline
Clase 9
Postman
-
play_circle_outline
Clase 10
Recibir datos de la petición
-
play_circle_outline
Clase 11
Datos con POST
-
play_circle_outline
Clase 12
Enviar HTML
-
play_circle_outline
Clase 13
Servir archivos estáticos
-
play_circle_outline
Clase 14
Motores de vistas
-
play_circle_outline
Clase 15
Qué es el caché
-
play_circle_outline
Clase 16
Tipos de caché
-
play_circle_outline
Clase 17
Caché de archivos estáticos
-
play_circle_outline
Clase 18
Qué son las cookies y las sesiones
-
play_circle_outline
Clase 19
Cookies
-
-
Módulo 3 | 11 clases
Bases de Datos
expand_more-
play_circle_outline
Clase 1
El lenguaje SQL
-
play_circle_outline
Clase 2
Configurando SQLite
-
play_circle_outline
Clase 3
Qué son las bases de datos y por qué las usamos
-
play_circle_outline
Clase 4
Drivers de conexión
-
play_circle_outline
Clase 5
Crear una tabla (Primer consulta)
-
play_circle_outline
Clase 6
Qué es un CRUD
-
play_circle_outline
Clase 7
Insertar registros en la Base de Datos
-
play_circle_outline
Clase 8
Limpiar parámetros (sanitize)
-
play_circle_outline
Clase 9
Qué es un ORM
-
play_circle_outline
Clase 10
Configurar SequelizeJS
-
play_circle_outline
Clase 11
Bases de datos relacionales y no relacionales
-
-
Módulo 4 | 24 clases
Buenas prácticas de desarrollo.
expand_more-
play_circle_outline
Clase 1
Presentación del bloque
-
play_circle_outline
Clase 2
Qué es el MVC
-
play_circle_outline
Clase 3
Organizar un proyecto MVC
-
play_circle_outline
Clase 4
Qué son las migraciones
-
play_circle_outline
Clase 5
CLI de Sequelize
-
play_circle_outline
Clase 6
Generando migraciones
-
play_circle_outline
Clase 7
Modelos
-
play_circle_outline
Clase 8
Controladores
-
play_circle_outline
Clase 9
Vistas
-
play_circle_outline
Clase 10
Seeders
-
play_circle_outline
Clase 11
Integrando todo
-
play_circle_outline
Clase 12
Qué es REST
-
play_circle_outline
Clase 13
REST en la práctica
-
play_circle_outline
Clase 14
Verbos Http en REST
-
play_circle_outline
Clase 15
Rutas REST en Express
-
play_circle_outline
Clase 16
Crear nuevos registros
-
play_circle_outline
Clase 17
Formularios
-
play_circle_outline
Clase 18
Mostrar registros
-
play_circle_outline
Clase 19
Vistas para todos los registros
-
play_circle_outline
Clase 20
Identificadores únicos
-
play_circle_outline
Clase 21
Consulta individual de recursos
-
play_circle_outline
Clase 22
Actualizar registros
-
play_circle_outline
Clase 23
Formularios con PUT, PATCH y DELETE
-
play_circle_outline
Clase 24
Eliminar registros
-
-
Módulo 5 | 14 clases
Autenticación
expand_more-
play_circle_outline
Clase 1
Explicando cómo funciona la autenticación de usuarios
-
play_circle_outline
Clase 2
Formulario de registro
-
play_circle_outline
Clase 3
Modelos y migración de usuarios
-
play_circle_outline
Clase 4
Validaciones
-
play_circle_outline
Clase 5
Validaciones en la base de datos y el modelo
-
play_circle_outline
Clase 6
Encriptar el password
-
play_circle_outline
Clase 7
Creación de usuarios
-
play_circle_outline
Clase 8
Inicio de sesión
-
play_circle_outline
Clase 9
Autenticación
-
play_circle_outline
Clase 10
Manejo de sesiones
-
play_circle_outline
Clase 11
Qué es un middleware
-
play_circle_outline
Clase 12
Buscar usuario autenticado
-
play_circle_outline
Clase 13
Cerrar sesión
-
play_circle_outline
Clase 14
Middlewares para protección de rutas
-
-
Módulo 6 | 14 clases
Relaciones en la base de datos.
expand_more-
play_arrow
Clase 1
Fundamentos de relaciones en la base de datos
-
play_circle_outline
Clase 2
Relaciones uno a muchos - El esquema
-
play_circle_outline
Clase 3
Relaciones uno a muchos - Los modelos
-
play_circle_outline
Clase 4
Nombres para asociaciones
-
play_circle_outline
Clase 5
Guardar relación uno a muchos
-
play_circle_outline
Clase 6
Relaciones en un proyecto real
-
play_circle_outline
Clase 7
Eager loading (Cargado anticipado)
-
play_circle_outline
Clase 8
Ejercicio - Implementa tu propio CRUD
-
play_circle_outline
Clase 9
Relaciones muchos a muchos
-
play_circle_outline
Clase 10
Integrando CRUD de Categorías
-
play_circle_outline
Clase 11
Tabla asociativa
-
play_circle_outline
Clase 12
Definir relación muchos a muchos
-
play_circle_outline
Clase 13
Crear relaciones muchos a muchos
-
play_circle_outline
Clase 14
Mostrar objetos de una relación muchos a muchos
-
-
Módulo 7 | 5 clases
Websockets (realtime)
expand_more-
play_circle_outline
Clase 1
¿Qué son las Websockets?
-
play_circle_outline
Clase 2
Usuarios conectados en tiempo real
-
play_circle_outline
Clase 3
Comunicar el servidor Http y el servidor de Websockets
-
play_circle_outline
Clase 4
Enviar datos de la base de datos a los clientes
-
play_circle_outline
Clase 5
Control de comunicación por usuario en Websockets
-
-
Módulo 8 | 4 clases
Entorno de producción
expand_more -
check_circle_outlineMódulo 9
Examen del curso
expand_more-
done_all
Examen
Examen final del curso
-