728x90
OneToOne
테이블 간 1:1 관계일 때 사용한다. 이 예시에선 유저와 유저 프로필에 대한 예제를 이용하겠다.
// User Entity
@OneToOne(() => ProfileModel, (profile) => profile.user)
profile: ProfileModel
// ProfileEntity
@OneToOne(() => UserModel, (user) => user.profile)
@JoinColumn()
author: UserModel
- UserModel에서 ProfileModel 타입의 profile을 만든다.
- @OneToOne() 어노테이션을 적어준다.
- 첫 번째 인자는 콜백함수 형태로 ProfileModel을 받아준다.
- 두 번째 인자는 콜백함수 형태로 해당 profile의 user라는 칼럼과 연결해 준다.
- 1:1 관계는 서로 동등한 관계이기 때문에 반대쪽 Model에서도 동일하게 작성한다.
- @JoinColumn 어노테이션을 입력하면 해당 칼럼에서 userId를 참조키를 받는다.
OneToMany
1:N 관계일 때 사용한다. 유저와 게시글에 대한 예시로 작성해 보겠다.
// UserModel
@OneToMany(() => PostModel, (post) => post.author)
posts: PostModel[]
// PostModel
@ManyToOne(() => UserModel, (user) => user.posts)
author: UserModel
- 1 인 쪽은 OneToMany 어노테이션을 N인쪽은 ManyToOne 어노테이션을 사용한다.
- 인자값은 위 사례와 동일하다.
- 게시글은 유저가 여러 개를 작성할 수 있기 때문에 PostModel [] 배열형태로 선언한다.
ManyToMany
N:N 관계일 때 사용한다. 게시글을 작성할 때 태그를 작성할 수 있다. 이 게시글과 태그는 서로 N:N의 관계를 가지고 있다.
// PostModel
@ManyToMany(() => TagModel, (tag) => tag.posts)
tags: TagModel[]
// TagModel
@ManyToMany(() => PostModel, (post) => post.tags)
posts: PostModel[]
관계 설정 시 옵션
// UserModel
@OneToOne(() => ProfileModel, (profile) => profile.user, {
eager: false,
cascade: true,
nullable: true,
onDelete: 'CASCADE',
})
profile: ProfileModel;
이 옵션들은 모든 관계설정시 사용가능한다.
- eager : true or false
- select를 할 때 find 옵션에서 relations 옵션을 주지 않아도 자동으로 관계를 맺은 테이블의 정보를 가져온다.
- cascade: true or false
- 데이터를 저장할 때 관계로 설정된 데이터를 한 번에 저장할 건지에 대한 여부
- ex) 유저 정보를 등록할 때 유저 프로필도 함께 저장이 된다.
- nullable: true or false
- null 값이 허용되는지 여부
- false면 해당 값이 Null 일수 없다.
- onDelete: 'CASCADE' or 'NO ACTION' or 'SET NULL' or 'SET DEFAULT' or 'RESTRICT'
- 해당 데이터가 삭제될 때 어떻게 처리할 건지에 대한 옵션이다
- CASCADE : 참조하고 있는 row도 같이 삭제한다
- NO ACTION : 아무 동작도 하지 않는다.
- SET NULL : 해당 칼럼을 null로 세팅한다.
- SET DEFAULT : default 값이 있다면 default 값으로 설정한다.
- RESTRICT : 해당 row가 다른 곳에서 참조 중이면 삭제가 불가능하다.
'Node.js' 카테고리의 다른 글
[NestJs] Custom Decorator (0) | 2023.12.28 |
---|---|
[NestJs]Guard 사용하기 (0) | 2023.12.27 |
[NestJs]Pipe사용하기 (1) | 2023.12.26 |
[NestJs] NestJs에서 typeorm 세팅하기(Docker-compose사용) (0) | 2023.12.18 |
[NestJs]의존성 주입과 제어의 역전 (0) | 2023.12.11 |