본문 바로가기

Project/Project_OurWorldCup

[Project: OurWorldCup] ERD 설계하기

반응형

설계 계기

Entity Relationship Diagram, ERD는 DB를 구축하는 데 자주 이용하는 다이어그램입니다.이전 프로젝트에서도 사용해서 이해하기 쉬웠던 경험이 있어 이번에도 설계한 후 프로젝트를 진행하고자 합니다. 각 테이블에 어떤 필드가 필요한 지, 테이블끼리의 관계가 어떻게 되는 지 미리 결정해 놓으니 개발할 때 맘 편히 작성할 수 있습니다.

설계

https://app.diagrams.net/에서 ERD를 그릴 수 있습니다. 저는 여기서 ERD 외에도 usecase와 같은 다양한 다이어그램을 작성합니다.

ERD v1

participants 테이블은 user_account - worldcup 테이블의 다대다 관계를 분리하기 위하여 생성된 테이블입니다. game 테이블은 월드컵 정보를 토대로 생성된 게임 인스턴스입니다. match 테이블은 플레이어가 선택한 모든 월드컵 기록을 저장하는 테이블입니다.

 

위 테이블은 제가 필요하다고 생각되는 table과 관계들을 바로 작성한 ERD입니다. 그러다보니, 미처 생각하지 못한 중복이 들어가 있을 수 있어 정규화 과정을 거치기로 했습니다.

 

정규화

정규화란 테이블 정규화하여 중복된 데이터를 허용하지 않도록 하는 것입니다. 이를 통해 "무결성"을 지킬 수 있습니다.

제1 정규화

각 컬럼이 원자값(하나의 값)을 가지도록 설계하는 것을 의미합니다. 제 ERD는 제 1정규화를 모두 만족하고 있습니다.

제 2 정규화 - 부분 함수 종속 제거

기본키의 부분집합이 결정자가 되어선 안되는 것을 의미합니다. 이는 완전 함수 종속을 충족하기 위해서입니다. 저는 각 테이블에 id라는 기본키를 사용하고 있어 제2 정규화를 모두 만족하고 있습니다.

제 3 정규화 - 이행적 함수 종속 제거

테이블 내의 모든 속성이 키에만 의존하여 다른 후보키에 의존하지 않는다는 것을 의미합니다. 다행히 테이블 개수가 적어 제 3 정규화도 만족하는 것을 확인할 수 있었습니다.

 

이외에도 BCNF, 제 4, 제 5 정규화가 있고 만족하는 지 확인하였습니다. 미처 발견하지 못한 문제점이 있을 수 있지만 어느정도 정규화가 잘 이루어져 있음을 확인할 수 있었습니다.

 

관계 표시가 잘못되어 있는 것을 한 부분 확인하여 수정한 후 해당 ERD를 토대로 도메인을 작성하기로 했습니다.

수정 후 ERD (game 테이블의 관계 설정에 오류가 있었다.)

* 이후 개발 하면서 ERD 설계에 큰 변화가 있었습니다. https://dbwp031.tistory.com/78

반응형