Zum Hauptinhalt springen

Entitätsvererbung

Inoffizielle Beta-Übersetzung

Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →

Konkrete Tabellenvererbung

Sie können Code-Duplikation reduzieren, indem Sie Entitätsvererbungsmuster verwenden. Das einfachste und effektivste ist die konkrete Tabellenvererbung.

Beispielsweise haben Sie die Entitäten Photo, Question und 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
}

Wie Sie sehen, haben alle diese Entitäten gemeinsame Spalten: id, title, description. Um Duplizierung zu reduzieren und eine bessere Abstraktion zu erreichen, können wir eine Basisklasse namens Content erstellen:

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
}

Alle Spalten (Relationen, Einbettungen etc.) von übergeordneten Entitäten (die Elternentität kann ebenfalls eine andere Entität erweitern) werden vererbt und in den finalen Entitäten erstellt.

Dieses Beispiel erzeugt drei Tabellen: photo, question und post.

Einzeltabellenvererbung

TypeORM unterstützt auch Einzeltabellenvererbung. Bei diesem Muster haben Sie mehrere Klassen mit eigenen Eigenschaften, die in der Datenbank jedoch in derselben Tabelle gespeichert werden.

@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
}

Dadurch wird eine einzelne Tabelle namens content erstellt, in der alle Instanzen von Fotos, Fragen und Beiträgen gespeichert werden.

Verwendung von eingebetteten Entitäten

Eine hervorragende Alternative zur Reduzierung von Duplizierung (Komposition statt Vererbung) bietet die Verwendung von embedded columns. Mehr zu eingebetteten Entitäten erfahren Sie hier.