1. 관계 설정이란?
- 관계를 설정하는 것은 DB의 테이블 간의 관계를 표현하는 것
- 관계 설정은 DB 구조를 설계하고 데이터를 조직화하는 중요한 부분이다. 이는 DB의 성능, 일관성, 무결성 등을 보장하는 데 결정적인 역할을 한다.
- 여러 엔터티가 서로 연결되어 있는 복잡한 시나리오에서는 특히 중요하다.
- 데이터 일관성: 관계 설정을 통해 데이터 일관성 유지
- 부모 엔터티와 자식 엔터티 간의 관계를 설정하면 부모 엔터티의 변경이 자식 엔터티에 반영되어 일관된 데이터를 유지할 수 있다.
- 데이터 무결성: 관계 설정을 통해 데이터 무결성을 유지할 수 있다. 외래 키 제약 조건을 사용하여 DB의 무결성을 보장할 수 있다.
- 부모 엔터티의 삭제가 자식 엔터티에 영향을 미치지 않도록 외래 키 제약을 설정할 수 있다.
- 쿼리의 간소화: 관계 설정을 통해 복잡한 쿼리를 간소화할 수 있다.
- 관계 설정을 통해 JOIN을 사용하여 여러 엔터티를 연결하고 필요한 데이터를 한 번에 가져올 수 있다.
- 성능 향상: 적절한 관계 설정을 통해 데이터베이스의 성능을 향상시킬 수 있다.
- 적절한 인덱스를 추가하거나 관계를 적절하게 정규화함으로써 쿼리의 성능을 최적화할 수 있다.
- 유지 보수 용이성: 관계 설정을 통해 데이터베이스의 구조를 명확하게 이해하고 유지할 수 있다.
- 코드의 가독성을 향상시키고 유지 보수를 쉽게 만든다.
- 데이터 일관성: 관계 설정을 통해 데이터 일관성 유지
2. @OneToOne (1:1)
- 한 엔터티가 하나의 엔터티를 가질 수 있는 관계
import { Entity, PrimaryGeneratedColumn, Column, OneToOne, JoinColumn } from "typeorm";
import { User } from "./User";
@Entity()
export class Profile {
@PrimaryGeneratedColumn()
id: number;
@Column()
bio: string;
@OneToOne(type => User)
@JoinColumn()
user: User;
}
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToOne(type => Profile, profile => profile.user)
profile: Profile;
}
3. @OneToMany (1:N) / @ManyToOne (N:1)
- @OneToMany(1:N)
- 한 엔터티가 다른 엔터티를 여러 개 가질 수 있는 관계
- @ManyToOne(N:1)
- 여러 개의 엔터티가 한 엔터티에 속하는 관계
- 하나의 User가 여러 개의 Post를 작성
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm";
import { Post } from "./Post";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(type => Post, post => post.author)
posts: Post[];
}
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm";
import { User } from "./User";
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
content: string;
@ManyToOne(type => User, user => user.posts)
author: User;
}
4. @ManyToMany (N:M)
- 여러 개의 엔터티가 한 엔터티에 속하는 관계
- 여러 Student가 여러 Course를 수강
import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable } from "typeorm";
import { Course } from "./Course";
@Entity()
export class Student {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToMany(type => Course, course => course.students)
@JoinTable()
courses: Course[];
}
import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable } from "typeorm";
import { Student } from "./Student";
@Entity()
export class Course {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToMany(type => Student, student => student.courses)
students: Student[];
}
'JavaScript Dev. > TypeORM' 카테고리의 다른 글
TypeORM - Repository 메소드 / QueryBuilder 메소드 (0) | 2024.03.04 |
---|---|
TypeORM - 주로 사용하는 데코레이터 정리 (0) | 2024.03.04 |
TypeORM - 설치부터 기본 개념까지 (0) | 2024.03.04 |
TypeORM (0) | 2024.03.04 |