Relaciones Uno a Muchos en Bases de Datos con TypeORM
Clase 20 de 36 • Curso de NestJS: Persistencia de Datos con TypeORM
Contenido del curso
- 3
Instalación de Docker en Windows, macOS y Ubuntu
01:35 - 4

Configuración de Postgres en Docker Compose
09:18 - 5

Conexión a Postgres en Docker: Terminal y PgAdmin
15:16 - 6

Conexión de NestJS a Postgres con Node Postgres
07:28 - 7

Inyección de Dependencias en NETJS: Conexión a PostgreSQL
10:49 - 8

Conexión a Bases de Datos con Variables de Entorno en Node.js
13:49
- 9

Implementación de TypeORM con NestJS en Proyectos Node.js
09:14 - 10

Creación de Entidades en ORM para Tiendas Virtuales
07:46 - 11

Implementación del Patrón Repository en NestJS con TypeORM
13:31 - 12

Operaciones CRUD en ProductService usando TypeORM y Postgres
13:35 - 13

Cambio de Postgres a MySQL en Docker para CRUD de Productos
17:28
- 18

Relaciones 1 a 1 en Bases de Datos con TimeORM
18:58 - 19

Manipulación de Relaciones Uno a Uno en Controladores y Servicios
10:28 - 20

Relaciones Uno a Muchos en Bases de Datos con TypeORM
10:36 - 21

Gestión de Relaciones Uno a Muchos en Controladores de API
10:27 - 22

Relaciones Muchos a Muchos en Time1M: Creación y Manejo Práctico
08:38 - 23

Manipulación de Relaciones Muchos a Muchos en Controladores
15:08 - 24

Manipulación de Relaciones Muchos a Muchos con TimeORM en JavaScript
19:09 - 25

Relaciones Muchos a Muchos con Campos Agregados en TimeWareM
16:41 - 26

CRUD de órdenes de compra y gestión de ítems en NestJS
30:07
- 27

Paginación de Productos con Limit y Offset en Controladores API
10:37 - 28

Filtrado de Precios con Rango Usando Between en Time Wareham
10:17 - 29

Indexación de Parámetros en Bases de Datos: Uso y Precauciones
02:56 - 30

Buenas prácticas de nombramiento en JavaScript y bases de datos
17:52 - 31

Serialización y Transformación de Datos en APIs con ClassTransformer
16:55
¿Cómo se establece una relación uno a muchos en TypeORM?
Al trabajar con bases de datos, una de las relaciones más comunes es la relación uno a muchos. En el contexto de una aplicación que gestiona productos y marcas, es crucial entender cómo establecer esta relación correctamente. Aquí exploraremos cómo implementar esta estructura en TypeORM y asegurarnos de que las entidades interactúan de la manera deseada.
¿Cómo se crean las entidades en TypeORM?
Antes de establecer la relación, debemos configurar las entidades. En el caso de la aplicación de productos y marcas, esto implica:
- Crear una entidad para las marcas (Brand):
- Utilizar el decorador
@Entity()para definir la tabla en la base de datos. - Asegurar que la entidad tiene una columna primaria autogenerada.
- Añadir un campo único para el nombre y un campo para la imagen.
- Incluir campos para las fechas de creación y actualización como buena práctica.
- Utilizar el decorador
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';
@Entity()
export class Brand {
@PrimaryGeneratedColumn()
id: number;
@Column({ unique: true })
name: string;
@Column()
image: string;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
- Configurar un servicio utilizando el patrón de Repositories para gestionar las operaciones CRUD básicas.
¿Cómo se define la relación uno a muchos?
Para vincular productos a marcas, es crucial implementar la relación correcta en las entidades.
- Productos a Marcas (Muchos a Uno):
- En la entidad Producto, se debe agregar un decorador
@ManyToOne()para establecer que muchos productos pueden estar relacionados a una única marca. - Se incluye un atributo que referencie a la entidad Brand.
- En la entidad Producto, se debe agregar un decorador
import { Entity, ManyToOne, Column, PrimaryGeneratedColumn } from 'typeorm';
import { Brand } from './Brand';
@Entity()
export class Product {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToOne(() => Brand, (brand) => brand.products)
brand: Brand;
}
- Marcas a Productos (Uno a Muchos):
- En la entidad Marca, se utiliza el decorador
@OneToMany()para definir que una marca puede estar relacionada a muchos productos. - Este decorador se acompaña de un atributo que maneja un array de Productos.
- En la entidad Marca, se utiliza el decorador
import { Entity, OneToMany, PrimaryGeneratedColumn, Column } from 'typeorm';
import { Product } from './Product';
@Entity()
export class Brand {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(() => Product, (product) => product.brand)
products: Product[];
}
¿Qué pasos seguir después de establecer la relación?
Una vez configuradas las entidades y sus relaciones, el siguiente paso es asegurarse de que estos cambios se reflejen en la base de datos:
-
Generar una nueva migración para aplicar las modificaciones en la estructura de tablas:
- Usar el comando
typeorm migration:generatepara crear la migración que añade la tabla de Brand y realiza las vinculaciones necesarias. - Ejecutar las migraciones con
typeorm migration:runpara aplicar los cambios.
- Usar el comando
-
Verificar las relaciones en la base de datos:
- Utilizar herramientas de gestión de bases de datos como PgAdmin para revisar que las tablas y sus llaves foráneas estén correctamente configuradas.
¿Cómo manejar las relaciones en los controladores?
Después de establecer las relaciones en las entidades, es vital implementar la lógica necesaria en los controladores para gestionar operaciones como la asignación de un producto a una marca, o la obtención de todos los productos de una marca específica. Este manejo es esencial para realizar consultas eficaces y ofrecer interfaces de usuario intuitivas.
Recomendaciones finales
Al diseñar arquitecturas de base de datos con TypeORM, siempre es importante:
- Usar buenas prácticas de codificación, como la gestión de servicios y controladores.
- Continuar explorando y mejorando las habilidades en bases de datos para proyectos más complejos. Cursos avanzados pueden ser útiles para afinar estos conceptos, como los ofrecidos en plataformas educativas especializadas.
- Mantenerse actualizado con las nuevas versiones de las herramientas y sus características para optimizar el rendimiento y escalabilidad de la aplicación.