mirror of
https://github.com/typeorm/typeorm.git
synced 2025-12-08 21:26:23 +00:00
Fix minor English errors and added a link to an article on the benefits and understandings of Adjacency Lists.
1.7 KiB
1.7 KiB
Tree Entities
TypeORM supports the Adjacency list and Closure table patterns for storing tree structures.
Adjacency list
Adjacency list is a simple model with self-referencing. The benefit of this approach is simplicity, drawback is that you can't load big trees in all at once because of join limitations. To learn more about the benefits and use of Adjacency Lists look at this article by Matthew Schinckel. Example:
import {Entity, Column, PrimaryGeneratedColumn, ManyToOne, OneToMany} from "typeorm";
@Entity()
export class Category {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
description: string;
@ManyToOne(type => Category, category => category.children)
parent: Category;
@OneToMany(type => Category, category => category.parent)
children: Category[];
}
Closure table
Closure table stores relations between parent and child in a separate table in a special way. It's efficient in both reads and writes. To learn more about closure table take a look at this awesome presentation by Bill Karwin. Example:
import {ClosureEntity, Column, PrimaryGeneratedColumn, TreeChildren, TreeParent, TreeLevelColumn} from "typeorm";
@ClosureEntity()
export class Category {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
description: string;
@TreeChildren()
children: Category[];
@TreeParent()
parent: Category;
@TreeLevelColumn()
level: number;
}