강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

최영주님의 프로필 이미지
최영주

작성한 질문수

김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴

섹션 6 SOFT DELETE) UNIQUE 제약 조건 + 가상 컬럼

해결된 질문

작성

·

37

·

수정됨

0

안녕하세요!

질문이 있습니다

Soft delete 환경에서 UNIQUE를 걸 시, 가상 컬럼을 이용한 해결 방법은 소개되지 않은 이유가 있나요?

가상 컬럼으로 해결하는 방식은 추천하지 않는 방법인가요?

 

예를 들어,

(MySQL)

목표 = Member - email의 unique를 지키는 것

 

<Member 테이블>

필드 = email, deleted_at, _active_check

UNIQUE(email, _active_check)

 

이때,

가상 컬럼 =

_active_check

-> _active_check BOOLEAN

GENERATED ALWAYS AS (

IF(deleted_at IS NULL, TRUE, NULL)

) VIRTUAL;

 

이렇게 하면

  1. hello 계정 생성

email = "hello", deleted_at = null, _active_check = true

(이때, hello 계정은 다시 INSERT 불가 (UNIQUE(email, _active_check))

  1. hello 계정 soft 삭제

email = "hello", deleted_at= 2025.01.01, _active_check = null

  1. hello 계정 다시 생성

     

email = "hello", deleted_at= 2025.01.01, _active_check = null

email = "hello", deleted_at = null, _active_check = true

=> 결과적으로 UNIQUE 제약이 지켜짐

 

가상 컬럼을 활용하여, Soft Delete 환경에서 UNIQUE 제약을 지키는 방식은 좋지 않은 방법인가요?

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 최영주님

같은 문제를 해결하는 여러가지 방법들이 있고, 각자의 장단점이 있는데요.

말씀하신 방식은 충분히 좋은 방법입니다 🙂

강의에서는 이 문제를 해결할 때 MySQL에 특화된 기능보다는 조금 더 보편적인 내용을 다루어서 제외하게 되었습니다.

감사합니다.

최영주님의 프로필 이미지
최영주

작성한 질문수

질문하기