Many-to-one
, One-to-many
는 다음과 관계를 말한다.User
와 Photo
엔티티 예시import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm"
import { User } from "./User"
@Entity()
export class Photo {
@PrimaryGeneratedColumn()
id: number
@Column()
url: string
@ManyToOne(() => User, (user) => user.photos)
user: User
}
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm"
import { Photo } from "./Photo"
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
name: string
@OneToMany(() => Photo, (photo) => photo.user)
photos: Photo[]
}
User
의 photos
프로퍼티에 @OneToMany
를 추가하고 Photo
를 대상 관계 타입으로 지정하였다.@ManyToOne, @OneToMany
관계의 경우 @JoinColumn
을 생략할 수 있다.@OneToMany
는 @ManyToOne
없이 존재할 수 없다.@OneToMany
를 사용하려면 @ManyToOne
이 필수적이다.@ManyToOne
관계만 고려한다면 @OneToMany
는 필수적이지 않다.@ManyToOne
을 설정한 엔티티는 “관계id”와 FK(외래키)를 포함하게 된다. @ManyToOne
을 설정한 Photo
테이블은 userId
라는 칼럼을 FK(외래키)로 포함하고 있다.@ManyToOne
을 설정한 엔티티에 대상 관계 엔티티의 PK가 담기는 이유가 뭘까 생각해 봤는데, 아래와 같은 이유라고 볼 수 있을 것 같다.
userID
칼럼을 FK로 포함하는 것이 효율적이다.User
테이블이 photoId
라는 칼럼으로 FK(외래키)를 포함하게 되면 데이터 중복이 발생하므로 비효율적이다.