resources 1:N availability_slotsavailability_slots 1:1 reservationsusers 1:N reservationsreservations 1:N reservation_paymentsreservations 1:1 cancellations
설계 포인트
설계 포인트
가능 시간과 예약을 분리합니다
availability_slots는 공급자가 열어 둔 시간이고 reservations는 사용자가 점유한 결과입니다. 둘을 분리하면 임시 홀드, 취소, 재오픈을 표현하기 쉽습니다.
중복 예약은 DB 제약과 애플리케이션 락을 같이 씁니다
slot_id에 UNIQUE를 두면 같은 슬롯을 두 번 예약하는 실수를 막을 수 있습니다. 시간 범위 직접 선택형 서비스라면 exclusion constraint도 검토합니다.
취소는 삭제보다 이력으로 남깁니다
예약 레코드를 삭제하면 고객 응대와 정산 근거가 사라집니다. cancellations 테이블로 사유와 시점을 별도로 보관합니다.
구현 전 체크
구현 전 체크
reservations.slot_id는 UNIQUE로 두어 같은 슬롯의 중복 예약을 막습니다.
starts_at과 ends_at에는 시간대 정책을 명확히 적용합니다.
취소 후 재예약 가능한 정책이면 slot.status를 함께 갱신합니다.
다른 ERD 예시
다른 ERD 예시
예시를 그대로 따라 그리거나, 가입 전 데모 캔버스에서 테이블과 관계를 먼저 만져볼 수 있습니다.