# 데이터설계가이드 

[요청사항]
- <작성원칙>을 준용하여 설계
- <작성순서>에 따라 설계
- [결과파일] 안내에 따라 파일 작성   

[가이드]  
<작성원칙>
- **클래스설계서의 각 서비스별 Entity정의와 일치**해야 함. **불필요한 추가 설계 금지**
- <데이터독립성원칙>에 따라 각 서비스마다 데이터베이스를 분리
<작성순서>
- 준비:
  - 유저스토리, API설계서, 외부시퀀스설계서, 내부시퀀스설계서, 패키지구조표준 분석 및 이해
- 실행:
  - <병렬처리>안내에 따라 각 서비스별 병렬 수행 
  - 데이터설계서 작성
    - 캐시 사용 시 캐시DB 설계 포함
    - 시작 부분에 '데이터설계 요약' 제공 
    - 결과: {service-name}.md 
  - ERD 작성
    - 결과: {service-name}-erd.puml
    - **PlantUML 스크립트 파일 생성 즉시 검사 실행**: 'PlantUML 문법 검사  가이드' 준용  
  - 데이터베이스 스키마 스크립트 작성 
    - 실행 가능한 SQL 스크립트 작성
    - 결과: {service-name}-schema.psql
- 검토: 
  - <작성원칙> 준수 검토
  - 스쿼드 팀원 리뷰: 누락 및 개선 사항 검토
  - 수정 사항 선택 및 반영  

<병렬처리>
Agent 1~N: 각 서비스별 데이터베이스 설계
  - 서비스별 독립적인 스키마 설계
  - Entity 클래스와 1:1 매핑
  - 서비스 간 데이터 공유 금지
  - FK 관계는 서비스 내부에서만 설정

<데이터독립성원칙>
- **데이터 소유권**: 각 서비스가 자신의 데이터 완전 소유
- **크로스 서비스 조인 금지**: 서비스 간 DB 조인 불가
- **이벤트 기반 동기화**: 필요시 이벤트/메시지로 데이터 동기화
- **캐시 활용**: 타 서비스 데이터는 캐시로만 참조 

[참고자료]
- 클래스설계서

[예시]
- 링크: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/samples/sample-데이터설계서.puml

[결과파일]
- design/backend/database/{service-name}.md
- design/backend/database/{service-name}-erd.puml
- design/backend/database/{service-name}-schema.psql
- service-name은 영어로 작성 
