설계 계기
Entity Relationship Diagram, ERD는 DB를 구축하는 데 자주 이용하는 다이어그램입니다.이전 프로젝트에서도 사용해서 이해하기 쉬웠던 경험이 있어 이번에도 설계한 후 프로젝트를 진행하고자 합니다. 각 테이블에 어떤 필드가 필요한 지, 테이블끼리의 관계가 어떻게 되는 지 미리 결정해 놓으니 개발할 때 맘 편히 작성할 수 있습니다.
설계
https://app.diagrams.net/에서 ERD를 그릴 수 있습니다. 저는 여기서 ERD 외에도 usecase와 같은 다양한 다이어그램을 작성합니다.
participants 테이블은 user_account - worldcup 테이블의 다대다 관계를 분리하기 위하여 생성된 테이블입니다. game 테이블은 월드컵 정보를 토대로 생성된 게임 인스턴스입니다. match 테이블은 플레이어가 선택한 모든 월드컵 기록을 저장하는 테이블입니다.
위 테이블은 제가 필요하다고 생각되는 table과 관계들을 바로 작성한 ERD입니다. 그러다보니, 미처 생각하지 못한 중복이 들어가 있을 수 있어 정규화 과정을 거치기로 했습니다.
정규화
정규화란 테이블 정규화하여 중복된 데이터를 허용하지 않도록 하는 것입니다. 이를 통해 "무결성"을 지킬 수 있습니다.
제1 정규화
각 컬럼이 원자값(하나의 값)을 가지도록 설계하는 것을 의미합니다. 제 ERD는 제 1정규화를 모두 만족하고 있습니다.
제 2 정규화 - 부분 함수 종속 제거
기본키의 부분집합이 결정자가 되어선 안되는 것을 의미합니다. 이는 완전 함수 종속을 충족하기 위해서입니다. 저는 각 테이블에 id라는 기본키를 사용하고 있어 제2 정규화를 모두 만족하고 있습니다.
제 3 정규화 - 이행적 함수 종속 제거
테이블 내의 모든 속성이 키에만 의존하여 다른 후보키에 의존하지 않는다는 것을 의미합니다. 다행히 테이블 개수가 적어 제 3 정규화도 만족하는 것을 확인할 수 있었습니다.
이외에도 BCNF, 제 4, 제 5 정규화가 있고 만족하는 지 확인하였습니다. 미처 발견하지 못한 문제점이 있을 수 있지만 어느정도 정규화가 잘 이루어져 있음을 확인할 수 있었습니다.
관계 표시가 잘못되어 있는 것을 한 부분 확인하여 수정한 후 해당 ERD를 토대로 도메인을 작성하기로 했습니다.
* 이후 개발 하면서 ERD 설계에 큰 변화가 있었습니다. https://dbwp031.tistory.com/78
'Project > Project_OurWorldCup' 카테고리의 다른 글
[Project/OurWorldcup] release v1.0 리뷰 (0) | 2023.10.06 |
---|---|
[Project/OurWorldcup] 로그인 OAuth2 + JWT - #1 도메인 추가 및 수정 (0) | 2023.09.21 |
[Project: OurWorldCup] branch 전략 분석 및 선택 (0) | 2023.09.01 |
[Project: OurWorldCup] API 명세서 작성하기 (0) | 2023.08.31 |
[Project: OurWorldCup] Figma로 프로젝트 설계하기 (0) | 2023.08.31 |