외래키

ClassBinu·2024년 5월 11일

F-lab

목록 보기
18/65

FK에 그냥 단순히 다른 테이블의 PK만 number 타입 등등으로 넣으면 끝나는 게 아니였다..??

나는 관계형 DB를 1도 모르고 있었다.
SQLD 자격증 어떤 게 딴 거지??
https://www.youtube.com/watch?v=gjcbqZjlXjM

RDB 개념

  • damoin
  • domain name
  • attribute
  • tuple
  • relation
  • relation name

set은 순서가 없다.
아래 그림 형태를 가장 잘 나타낼 수 있는 게 테이블임.

릴레이션은 튜플들의 집함.
그리고 이 튜플은 중복될 수 없다.

릴레이션의 튜플을 식별하기 위해 속성의 부분 집합을 key로 설정한다.

속성의 '부분 집합'을 키로 설정한다는 부분에서 '띠용!'

문제의 코드

// TODO: 외래키 설정
  @Column()
  classroom: number;

  // TODO: 외래키 설정
  @Column()
  studentId: number;

타입으로 여러 객체를 넣고, 관계를 설정하려고 해도 계속 오류나서 우선 여기까지하고 PR 날림.

멘토님 피드백

맞아요. 이 코드는 수정되어야 해요. TypeORM 에서 relation 사용법을 공부하시면 될 것 같아요.
ref: https://orkhan.gitbook.io/typeorm/docs/many-to-one-one-to-many-relations

다대일/일대다 관계

예를 들어 User와 Photo 관계를 보자.

User => Photo1, Photo2, Photo3 ...
이런 관계다.

외래키 설정 방식

@ManyToOne / @JoinColumn

가장 일반적인 방법으로, 다대일(N:1) 관계를 설정할 때 사용합니다.
@JoinColumn은 실제 외래키 컬럼을 데이터베이스에 어떻게 생성할지 지정합니다.

@OneToMany

이 데코레이터는 일대다(1:N) 관계를 설정하는 데 사용됩니다.
일반적으로 @ManyToOne의 반대쪽에 사용됩니다.

@ManyToMany / @JoinTable

다대다(N:N) 관계를 설정할 때 사용합니다.
@JoinTable을 사용하여 관계의 구현을 위한 조인 테이블을 명시적으로 정의할 수 있습니다

단방향 vs 양방향

단방향

정의: 한 모델이 다른 모델 참조하지만, 참조되는 모델은 다른 모델 참조하지 않음.
장점: 구현 간단, 필요한 관계만 명확하게 정의
단점: 역방향 참조가 필요할 때 추가 쿼리 필요

양방향

정의: 두 모델이 서로를 참조하는 관계. 두 엔티티 간 양방향 소통 가능
장점: 역방향 참조가 자연스럽게 처리
단점: 구현 복잡, 두 엔티티 간의 결합도가 높아짐. 이로 인해 성능 문제 발생

이걸 몰라서 계속 헤맸다!!!

0개의 댓글