Herencia de Entidades
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Herencia de Tabla Concreta
Puedes reducir la duplicación en tu código utilizando patrones de herencia de entidades. El más simple y efectivo es la herencia de tabla concreta.
Por ejemplo, tienes las entidades Photo, Question y Post:
@Entity()
export class Photo {
@PrimaryGeneratedColumn()
id: number
@Column()
title: string
@Column()
description: string
@Column()
size: string
}
@Entity()
export class Question {
@PrimaryGeneratedColumn()
id: number
@Column()
title: string
@Column()
description: string
@Column()
answersCount: number
}
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number
@Column()
title: string
@Column()
description: string
@Column()
viewCount: number
}
Como puedes ver, todas estas entidades tienen columnas comunes: id, title y description.
Para reducir la duplicación y crear una mejor abstracción, podemos crear una clase base llamada Content para ellas:
export abstract class Content {
@PrimaryGeneratedColumn()
id: number
@Column()
title: string
@Column()
description: string
}
@Entity()
export class Photo extends Content {
@Column()
size: string
}
@Entity()
export class Question extends Content {
@Column()
answersCount: number
}
@Entity()
export class Post extends Content {
@Column()
viewCount: number
}
Todas las columnas (relaciones, incrustaciones, etc.) de las entidades padre (el padre también puede extender otra entidad) se heredarán y crearán en las entidades finales.
Este ejemplo creará 3 tablas: photo, question y post.
Herencia de Tabla Única
TypeORM también admite herencia de tabla única. La herencia de tabla única es un patrón donde tienes múltiples clases con sus propias propiedades, pero en la base de datos se almacenan en la misma tabla.
@Entity()
@TableInheritance({ column: { type: "varchar", name: "type" } })
export class Content {
@PrimaryGeneratedColumn()
id: number
@Column()
title: string
@Column()
description: string
}
@ChildEntity()
export class Photo extends Content {
@Column()
size: string
}
@ChildEntity()
export class Question extends Content {
@Column()
answersCount: number
}
@ChildEntity()
export class Post extends Content {
@Column()
viewCount: number
}
Esto creará una única tabla llamada content donde se guardarán todas las instancias de fotos, preguntas y publicaciones.
Usando entidades incrustadas
Existe una forma excelente de reducir la duplicación en tu aplicación (usando composición sobre herencia) mediante embedded columns.
Lee más sobre entidades incrustadas aquí.