entity 작성 / OneToOne || OneToMany & ManyToOne || ManyToMany / 관계도 MySQL 적용 본문
entity 작성 / OneToOne || OneToMany & ManyToOne || ManyToMany / 관계도 MySQL 적용
자전하는명왕성 2023. 2. 4. 01:22
오늘은 저번에 업로드한 ERD를 기준으로 MySQL에 엔티티를 적용해보았다.
// 상품 / product.entity.ts
@Entity() // 엔티티 임을 선언
export class Product {
@PrimaryGeneratedColumn('uuid') // uuid 를 통해 id 생성
id: string;
@Column()
product_Name: string;
// 중략 //
}
엔티티 작성은 다음과 같다.
데코레이션을 통해 Entity 를 선언하고,
PrimaryGeneratedColumn 을 통해 PK임을 선언함과 동시에
임의의 id 를 만드는 uuid 를 생성한다.
그리고 그 아래로 콜론 값으로 들어오는 엔티티를 각 타입에 맞추어 작성해준다.
관계 작성
다음은 관계 작성에 대해 다룬다.
TypeORM 에는 아래 질의문을 통해 관계를 설정해줄 수 있다.
- OneToOne
- OneToMany / ManyToOne
- ManyToMany
OneToOne ( = 일대일 관계)
https://typeorm.io/one-to-one-relations
오늘 실습에서는 다루지 않았던 내용이라 typeORM 독스에 나와있는 내용으로 대체한다.
// A.ts
@Entity()
export class A {
@PrimaryGeneratedColumn()
id: number
// 중략 //
}
// B.ts
@Entity()
export class B {
@PrimaryGeneratedColumn()
id: number
// 중략 //
@OneToOne(() => A)
@JoinColumn()
a : A
}
// A : id
// B : id , A(FK)
일대일 관계에서는 B 에서 OneToOne / JoinColumn 을 사용하여 A의 인스턴스를 포함할 수 있다.
OneToMany / ManyToOne (일대다 다대일 관계)
일대다 다대일 관계는 A가 B의 여러 인스턴스를 포함하지만, B는 A의 이느턴스를 하나만 포함하는 관계다.
// A.ts
@Entity()
export class A {
@PrimaryGeneratedColumn()
id: number
// 중략 //
@ManyToOne(()=> B, (b) => b.a)
b: B
}
// B.ts
@Entity()
export class B {
@PrimaryGeneratedColumn()
id: number
// 중략 //
@OneToMany(() => A, (a) => b.a)
a : A[] // A 안의 many 를 가져오기 위한 '[]'
}
// A : id, B(FK)
// B : id
중요한 점은 ManyToOne / OneToMany 에서는 @joinColumn 을 생략할 수 있다.
** One 인 B가 A의 인스턴트로 자연스레 참조
실습에서 product 와 productCategory 를 다대일로 연결한 모습
OneToMany 는 단독으로 사용할 수 없지만, ManyToOne은 단독 사용이 가능한 것 같다.
ManyToMany (다대다)
다대다 관계는 A가 B의 여러 인스턴스를 포함하고, B가 A의 여러 인스턴스를 포함하는 관계다.
// A.ts
@Entity()
export class A {
@PrimaryGeneratedColumn()
id: number
// 중략 //
@JoinTable()
@ManyToMany(() => B, (b) => b.a)
b: B[] // B안의 'many'를 가져오기 위한 '[]' 사용
}
// B.ts
@Entity()
export class B {
@PrimaryGeneratedColumn()
id: number
// 중략 //
@ManyToMany(() => A, (a) => b.a)
a : A[] // A 안의 many 를 가져오기 위한 '[]'
}
// A : id
// B : id
// A_B : A_id, B_id
ManyToMany 관계에서는 @JoinTable() 이 필요하다.
** 새로운 테이블을 생성하여 중간 테이블을 만듦으로써 일대다 / 일대다 관계로 관리할 수 있음
실습에서 product 와 productAllergy 를 다대다로 연결한 모습
MySQL 내에서 확인할 수 있는 엔티티 관계도
'개발 > nest.js' 카테고리의 다른 글
NestJs - Join API 구현 (0) | 2023.02.09 |
---|---|
NestJS - CRUD / TypeORM (0) | 2023.02.07 |
집계 & 정렬 & 서브 쿼리 (0) | 2023.02.04 |
nestJS - MySQL과의 연동 (0) | 2023.02.01 |
typeScript Generic / Utility (1) | 2023.01.31 |