Relaciones 1 a 1 en Bases de Datos con TimeORM
Clase 18 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 manejar relaciones en bases de datos relacionales con TypeORM?
En el mundo de las bases de datos relacionales, es crucial entender cómo gestionar las diferentes relaciones que pueden ocurrir entre tablas, tales como uno a uno, uno a muchos, y muchos a muchos. En esta clase vamos a explorar cómo se puede utilizar TypeORM para manejar estas relaciones, enfocándonos en la relación uno a uno, específicamente entre un usuario y un cliente (user y customer).
¿Cómo se establece la relación uno a uno?
Vamos a crear las entidades necesarias, siguiendo buenas prácticas en su estructuración:
-
Entidad
Customer:- Llave primaria (
ID). - Atributos como
name,lastName, yphone, todos de tipoVarchar. - Timestamps para
created_atyupdated_at.
- Llave primaria (
-
Entidad
User:- Llave primaria (
ID). - Atributos como
email,password(encriptado en futuras implementaciones), yrole. - Timestamps para
created_atyupdated_at.
- Llave primaria (
Ambas entidades deben ser declaradas en el User Module, donde se configurarán como entidades gestionadas por TypeORM.
¿Cómo crear la relación uno a uno?
Para implementar la relación uno a uno, se deben importar y utilizar dos decoradores de TypeORM: @OneToOne y @JoinColumn. Nuestra relación, en este escenario, será opcional, permitiendo que algunos usuarios no tengan clientes asociados (usuarios administrativos, por ejemplo).
// En User Entity
@OneToOne(() => CustomerEntity, { nullable: true })
@JoinColumn()
customer: CustomerEntity;
Usamos @OneToOne para declarar la relación y @JoinColumn exclusivamente en una de las entidades, designando la entidad "dueña" de la relación.
¿Cómo manejar relaciones bidireccionales?
TypeORM admite relaciones bidireccionales, lo que significa que cualquier entidad puede conocer su contraparte asociada:
// En Customer Entity
@OneToOne(() => UserEntity, user => user.customer, { nullable: true })
user: UserEntity;
Aquí especificamos el decorador @OneToOne con una row function, resolviendo la relación desde ambas entidades. Sin embargo, @JoinColumn solo se especifica en un lado, en este caso en User, para establecer quién tiene la relación en la base de datos.
¿Cómo crear y ejecutar migraciones?
Para establecer nuestras entidades en la base de datos, es indispensable generar y ejecutar migraciones:
-
Crear migración:
npm run typeorm migration:generate -- create-user-and-customer -
Ejecutar migración:
npm run typeorm migration:run
Estas acciones se traducen en la creación física de las tablas y relaciones en la base de datos. Puedes verificar la ejecución accediendo a pgAdmin y revisando los esquemas generados.
¿Cómo verificar estructuras de tablas desde el terminal?
Puedes inspeccionar las estructuras y relaciones creadas por TypeORM conectándote directamente al contenedor de PostgreSQL:
docker-compose exec postgres-container bash
psql -h localhost -d mydb -U root
\d+ users // Consultar detalles de la tabla users
Esta metodología te permite verificar la estructura de las tablas y sus llaves foráneas de manera detallada.
Atrévete a implementar esta configuración en tus proyectos, experimentando con las poderosas funcionalidades que te ofrece TypeORM para manejar relaciones complejas en tus bases de datos. ¡Sigue explorando y aprendiendo nuevas herramientas para llevar tus habilidades de desarrollo al siguiente nivel!