프로젝트 DB 설계에 관하여

 

프로젝트 링크 : https://github.com/yesaroun/MoneyLog

 

GitHub - yesaroun/MoneyLog

Contribute to yesaroun/MoneyLog development by creating an account on GitHub.

github.com

 

1년 전에 spring 기반의 가계부를 구현하는 프로젝트를 진행했었습니다. 

이 프로젝트를 통해서 DB 설계와 정규화를 직접 구현해 볼 수 있었습니다.

 

전체적인 ERD 구조는 위와 같습니다.

하나씩 구체적으로 살펴보면서 설계한 이유를 적어보겠습니다.

 

이용자 식별 코드

'이용자식별' 테이블을 만들었습니다. 

이렇게 설계한 이유는 후술할 탈퇴 계정과 추가회원정보와 연관이 깊습니다.

저희 서비스는 회원의 정보를 활용한 통계 자료가 매우 중요했습니다. 그러기에 회원이 탈퇴했을 경우 관련 데이터를 함께 탈퇴 테이블로 옮긴다면, 서비스에 활용될 데이터 또한 사라져 버리는 문제가 발생합니다.

 

그래서 생각해낸 방법이 임의의 코드로 만들어진 이용자 식별 코드를 따로 분리해 '회원정보'테이블과 '추가회원정보'테이블에서 외래키로 받는 방법이었습니다.

이 경우 아래에 있는 '그림1)'처럼 탈퇴에 사용될 회원 정보와 '그림2)'의 통계 자료로 활용할 추가적인 회원 정보를 분리할 수 있었습니다.

이러면 회원이 탈퇴 했을 경우 '회원정보'테이블에 있는 회원 정보만 '탈퇴계정백업'테이블로 보내고, 나머지 정보는 그대로 활용할 수 있었습니다.

 

 

그림1)
그림2)

 

 

 

탈퇴 계정

회원이 탈퇴를 했을 경우 바로 회원 정보를 테이블에서 지우는게 아닌 '탈퇴계정백업'테이블에 일정 기간 저장하는 방식입니다.

 

 

 

추가회원정보

추가 회원 정보를 단순하게 '추가회원정보'테이블에 직접 값을 입력하는 방식이 아닌 정규화를 통해서 분해했습니다.

예를 들어 반려동물수를 살펴보면,

'반려동물수' 테이블을 따로 만들어서 여기에는

반려동물수코드(PK) 반려동물수
1 0마리
2 1마리
3 2마리
... ...

이런 값이 들어가고 '추가회원정보'테이블에는 해당하는 외래키를 가져다가 사용하는 방식입니다.

 

 

'SQL > Oracle' 카테고리의 다른 글

30. ROW_NUMBER, 시퀀스(SEQUENCE)  (0) 2022.03.29
29. 중첩 그룹함수 / 분석함수  (0) 2022.03.12
28. HAVING  (0) 2022.03.12
27. CUBE  (0) 2022.03.12
26. ROLLUP, GROUPING  (0) 2022.03.12