Skip to main content

Foreign Key

FK

  • 키 자체를 말함
  • 컬럼의 값을 말할 수도 있고, FK 가 설정된 컬럼 자체를 일컫는 말일 수도 있다.
  • 외래키는 참조 대상이 있다.

FK constraints

  • constraints, 즉 제약 조건은 데이터 무결성을 강제한다.
  • 데이터 무결성이란, 참조하고 있는 키가 반드시 참조 대상 컬럼에 있는 키들 중 하나를 참조를 한다는 뜻이다.

외래키 제약조건 없이 참조 구현

data class Restaurant(
    val name: String,
    val menus: List<String>,
    val menusScore: List<Double>
)
data class Menu(
    val name: String,
    val restaurantName: String,
    val menuScore: Double
)

메뉴 읽기 read

  • restaurantRepository.findByName() 호출
  • menuRepository.findByRestaurantName() 호출
  • FK 를 사용안하고, RestaurantName이란 컬럼을 만든다

메뉴 생성 write

  • menuRepository.save()
  • restaurantRepository.save()
  • 동시에 이벤트 소싱 방식으로 호출.

이벤트 소싱이란?

사례

일례로 모 커머스 플랫폼 서비스에서는 상품별 카테고리 분류와 카테고리 목록 관리가 모두 필요해서 카테고리 하나 추가하면 상품의 카테고리 분류 칼럼과 카테고리 목록 row가 모두 업데이트됐고 서로 조인할 수 있는 형태는 아니었습니다. 원문