1. 문제
ERD 설계 중 비회원도 장바구니를 이용할 수 있어야 한다고 생각했다.
- 비회원의 장바구니도 DB에 저장할 것인가?
- 비회원의 장바구니도 DB에 저장하기로 했다.
-> 비회원도 잠재적인 고객이기 때문에, 장바구니를 DB로 저장하도록 결정했다.
(Redis에 저장 후 스케줄러와 배치로 DB에 백업하는 방식)
- 비회원의 장바구니도 DB에 저장하기로 했다.
- DB에 저장한다면 비회원의 장바구니는 어떻게 식별할 것인가?
- UUID를 장바구니 PK로 사용하고, 고객(회원/비회원)에게 해당 UUID를 할당하는 방식으로 해결하고자 했다.
-> 장바구니 테이블은 회원 테이블과 연결되어 있지만, 비회원의 경우 회원 FK를 어떻게 처리할 것인가?
- UUID를 장바구니 PK로 사용하고, 고객(회원/비회원)에게 해당 UUID를 할당하는 방식으로 해결하고자 했다.
2. 시행착오
"고객 테이블을 만들고, 회원은 고객 테이블에 의존하는 관계로 설계하면 어떨까?" 그런데 이렇게 되면 비회원도 사실상 하나의 '회원'으로 DB에서 관리되는 형태가 되는거 아닌가? 라는 의문이 들었다. 고객임을 식별할 수 있도록 ID와 PW 같은 인증 방법이 필요하기 때문이다. 비회원은 사이트에 로그인하지 않고 서비스를 이용하는 고객이다. 이들은 회원으로 이용할 때 얻는 이점보다, 자신의 개인정보가 사이트에 저장되지 않기를 원하는 경우가 많다. 따라서 비회원은 단순히 서비스를 이용할 수 있을 뿐, 회원과는 다른 방식으로 관리되어야 한다고 생각했다.
3. 해결
"장바구니 테이블에 있는 FK(회원ID)가 NULL을 허용하면 되지 않을까?"
외래 키(FK)는 당연히 NOT NULL 이어야 한다고 생각했기 때문에, 무결성 제약조건에 위배되지 않을까 하는 걱정이 들었다. 하지만 외래 키(FK)가 NULL일 경우, 이는 "참조되지 않는다"는 의미로 해석되기 때문에, 무결성 제약조건에 위배되지 않는다.
참고
[Relational database] 02. 관계형 모델 (Relational model) *제약조건
Chapter 1: 관계 모델 개요관계 모델 개요Dr.Codd의 12법칙관계 데이터베이스 시스템 역사 Chapter 2: RelationRelation SchemaRelation InstanceDomainRelational Database실습: SQL을 사용한 Relation 생성 및 수정 (MySQL)Chapter
lightningtech.tistory.com
'프로젝트 > 쇼핑몰 프로젝트' 카테고리의 다른 글
[쇼핑몰 프로젝트] Spring MVC 구조 - 단위 테스트 코드 작성하기 (0) | 2025.03.26 |
---|---|
[쇼핑몰 프로젝트] 분산 환경에서 데이터 캐싱 - Redis (1) | 2025.03.24 |
[쇼핑몰 프로젝트] 서버 다중화 환경에서 세션 기반 인증 문제 해결 – JWT 적용 (0) | 2025.03.21 |
[쇼핑몰 프로젝트] 외부에 노출되는 PK, 어떤 전략을 사용해야 할까? (0) | 2025.03.13 |
[쇼핑몰 프로젝트] 프로젝트 후기 (0) | 2025.02.02 |