GO

[Go]Gorm Tag이해하기

Gorm Tag이해하기

GORM이란

ORM이란 객체/구조체와 관계형 데이터베이스의 데이터 간의 존재하는 불일치를 매핑시켜주는 것으로 해결해주는 도구이다. GORM은 Go언어에서 최적화된 ORM 라이브러리라고 할 수 있다.

GORM Tag

모델 연결

선언한 모델(객체/구조체) 안에 다른 모델을 속하게 하여 이를 외래키(Foreign key, FK)로 연결하고 1:1 관계를 만들어준다. GORM에서는 부모 테이블의 필드명이 ID로 끝나는 필드를 찾아 자식 테이블의 ID와 자동으로 FK 연결을 해준다.

// GORM을 이용한 자동 FK 매핑
type User struct {
  gorm.Model
  Name      string
  CompanyID int
  Company   Company
}

type Company struct {
  ID   int
  Name string
}
User 구조체 안에 Company를 FK로 연결하여 User의 정보 만으로 Company의 정보를 가지고 올 수 있다. 즉, User 테이블의 CompanyID와 Company 테이블의 ID가 일치하는 데이터를 가져온다.

인스턴스란?
객체/구조체를 컴퓨터 저장공간에 실제로 할당하는 것

외래키(foreign key)란?
관계형 데이터베이스에서 외래 키는 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키를 말한다.(위키백과)

FK의 재정의

만약 필드명이 ID로 끝나지 않는 필드를 FK로 지정하고 싶은 경우에는 FK를 재정의할 필요가 있다. GORM의 태그 `gorm:"foreignKey:CompanyRefer"` 를 이용하여 이를 재정의 할 수 있다.

// GORM 태그를 이용한 FK의 재정의
type User struct {
  gorm.Model
  Name         string
  CompanyRefer int
  Company      Company `gorm:"foreignKey:CompanyRefer"`
  // use CompanyRefer as foreign key
}

type Company struct {
  ID   int
  Name string
}
CompanyRefer를 FK로 사용하여 Company의 정보를 가지고 온다. 즉, User 테이블의 CompanyRefer과 Company 테이블의 ID가 일치하는 데이터를 가지고 온다.

참조(References)의 재정의

만약 자식 테이블의 ID가 아닌 다른 필드와 FK로 연결하고 싶은 경우에는 참조를 재정할 필요가 있다. GORM 태그 `gorm:"references:Code"` (V1의 경우:`gorm:"association_foreignkey:Code"`)를 이용하여 이를 재정의 할 수 있다.

type User struct {
  gorm.Model
  Name      string
  CompanyID string
  Company   Company `gorm:"references:Code"` // use Code as references
}

type Company struct {
  ID   int
  Code string
  Name string
}
FK키의 참조를 Company의 Code로 설정한다. 즉, User 테이블의 CompanyID와 Company 테이블의 Code가 일치하는 데이터를 가지고 온다.

외래키와 참조의 재정의 동시에 하기

type User struct {
  gorm.Model
  Name         string
  CompanyRefer string
  Company      Company `gorm:"foreignKey:CompanyRefer;association_foreignkey:Code"`
}

type Company struct {
  ID   int
  Code string
  Name string
}
User 테이블의 CompanyRefer와 Company 테이블의 Code를 사용하여 FK 연결을 지어준다.
최신글