한명의 유저는 여러 글을 포스팅할 수 있어야 한다.
이러한 것처럼 User - Post는 일대다 관계로 정의할 수 있다.
import { Column, CreateDateColumn, Entity, Generated, JoinColumn, OneToMany, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn, VersionColumn } from "typeorm";
import { ProfileModel } from "./profile.entity";
import { PostModel } from "./post.entity";
export enum Role {
USER = 'user',
ADMIN = 'admin',
}
@Entity()
export class UserModel {
@PrimaryGeneratedColumn()
id: number;
@Column()
email: string;
@Column({
type: 'enum',
enum: Role,
default: Role.USER,
})
role: Role;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
/**
* 데이터가 업데이트 될 때마다 1씩 올라간다.
* 처음 생성되면 값은 1이다.
* save() 함수가 몇번 불렸는지 기억한다.
*/
@VersionColumn()
version: number;
@Column()
@Generated('uuid')
additionalId: string;
@OneToOne(() => ProfileModel, (profile) => profile.user)
@JoinColumn()
profile: ProfileModel;
@OneToMany(() => PostModel, (post) => post.author)
posts: PostModel[]
@Column({
default: 0,
})
count: number
}
@OneToMany(() => PostModel, (post) => post.author)
posts: PostModel[]
유저는 많은 포스트를 작성할 수 있으므로, 일대다 관계이다. 그러므로 @OneToMany로 작성한다.
import { Column, Entity, JoinTable, ManyToMany, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
import { UserModel } from "./user.entity";
import { TagModel } from "./tag.entity";
@Entity()
export class PostModel {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => UserModel, (user) => user.posts)
author: UserModel;
@ManyToMany(() => TagModel, (tag) => tag.posts)
@JoinTable()
tags: TagModel[];
@Column()
title: string;
}
포스트는 하나의 유저가 작성한 것에 속해야하므로 다대일 관계이다. 그러므로 @ManyToOne 으로 작성한다.
@JoinTable() 은 어떻게 해야할까? (외래키)
이 부분은 조금만 고민해보면 쉽게 알 수 있다.
유저가 그 많은 포스팅에 대한 정보(외래키)들을 다 가지고 있어야 할까?
그건 현실적으로 불가능하므로 '다'에 해당하는 쪽에서 '일'의 해당하는 정보인 외래키를 들고 있어야 한다.
즉, 포스트된 글이 유저의 id만을 알고 있으면 된다.
'NestJS' 카테고리의 다른 글
TypeORM - FindManyOptions 파라미터 (0) | 2025.02.24 |
---|---|
TypeORM - 다대다 관계 구현 (0) | 2025.02.24 |
TypeORM - 일대일 관계 구현 (0) | 2025.02.24 |
Entity Embedding VS Table Inheritance (0) | 2025.02.24 |
TypeORM - Entity Column 탐구 (0) | 2025.02.24 |