728x90
nestjs + typeORM을 공부하던 중 특정 컬럼에 대해 유니크 속성을 주어야 하는데, 두 가지 방법이 보였다.
첫 번째는 변수에 @Column 데코레이터를 사용하는 것이고,
두 번째는 클래스에 @Unique 데코레이터를 사용하는 것이다.
두 방법 모두 유니크 속성을 부여한다는 것은 동일하지만 약간의 차이가 있다.
유니크 속성을 각각 부여하느냐, 합쳐서 부여하느냐의 차이다.
@Column({ unique : true })
일반적으로 원하는 특정 컬럼에 유니크 속성을 주기 위해 사용할 수 있다.
@Column({ unique: true })
first: string;
@Column({ unique: true })
second: string;
이러한 방식으로 생성된 제약조건을 살펴보면 각각 컬럼별로 두 개의 제약조건이 생성된 것을 볼 수 있다.
@Unique(['first', 'second'])
두가지 컬럼에 하나의 유니크 제약조건을 부여한다.
즉, 'first' 및 'second' 열의 값이 모두 동일한 행이 두 번 이상 삽입되는 것을 방지한다.(복합키)
@Unique(['first', 'second'])
export class User extends BaseEntity {
...
}
두 컬럼이 하나의 제약조건으로 묶여있는 모습이다.
위 사진처럼 first의 중복과 second의 각각 중복은 가능하다.
하지만, 이 상태에서
INSERT INTO users (first, second) VALUES ('a', 'b');
쿼리를 실행하게 되면 어떻게 될까?
위와 같이 에러가 발생한다.
결론
@Column 데코레이터에 unique: true 옵션을 주는 것은 일반적으로 유니크 속성을 부여하는 것이다.
@Unique 데코레이터는 복합키를 생성할 때 사용한다.
728x90
'개발일지 > Node.js' 카테고리의 다른 글
Prisma vs TypeORM 벤치마크 (0) | 2024.04.09 |
---|---|
TypeORM + MySQL8 AsText does not exist (0) | 2024.03.12 |
Nestjs - Shared modules : 의존성 주입을 통하여 모듈 공유하기 (0) | 2024.02.29 |
SQL Injection 방지 - 권장방식에는 다 이유가 있지.. (0) | 2024.01.31 |