작성일: 2023.06.07(수)
KT AIVLE AI 개발자 트랙 3기 과정의 마지막인 빅프로젝트를 진행하고 있습니다.
프로젝트에서 '백엔드'를 담당해 개발을 본격적으로 시작하기에 앞서 DB설계를 위한 ERD를 작성을 진행할 예정입니다.
'Pose-Estimation과 Wi-Fi를 이용한 영아 위험 행동 감지 및 비상 상황 알림 서비스'(이하 ‘아일보리 프로젝트’)
영아의 안전 사고를 예방하고 영아를 키우는 부모들을 대상으로 한 프로젝트입니다.
아일보리 프로젝트에서는 다음과 같은 핵심 기능이 포함될 예정입니다.
아래 서비스 플로우를 바탕으로 ERD를 작성할 예정
DB 설계는 어떻게 해야 할까? 이 글을 참고하여 진행하였다.
각 필드의 이름, 데이터 종류, 허용 길이, 값 범위, 유일성, NULL 지원, 기본값에 대해 생각해보아야 함.
현재까지의 설계는 아래와 같다.
두 테이블은 '1:1', '1:N', 'N:M', '식별 관계', '비식별 관계'를 맺을 수 있음.
이 물음에 대한 답이 관계를 설명해줄 수 있음.
다중 값 필드가 생기거나 테이블에 대량의 중복 데이터가 포함될 수 있으므로 반드시 풀어주여야 함.(제거)
장점
데이터의 정합성
자식 테이블에 데이터가 존재한다면 부모 데이터도 반드시 존재한다고 보장
단점
요구사항이 변경 시 구조 변경이 어려움
장점
변경되는 요구사항을 유동적으로 수용 가능
부모 데이터와 독립적인 자식 데이터를 생성 가능
단점
데이터 정합성을 지키기 위한 별도의 비즈니스 로직이 필요
자식 데이터가 존재해도 부모 데이터가 존재하지 않을 수 있음
즉, 데이터 무결성 미보장
정리
식별관계보다 비식별관계를 선호
구조 변경 용이
부모 테이블에 대한 의존성 제거
과도한 인덱스 제거
유연성을 생각한다면 '비식별 관계'로 설정하는 것이 맞지만,
우선, 개념만을 생각하여 '식별 관계'로 설정하였음(추후 변경 가능)
DB 설계를 체계적으로 해보는 과정을 처음 경험하고 있는데,
논리를 바탕으로 관계를 정의하고 설계를 이어나가는 점이 매우 흥미롭게 다가왔다.
물론 어렵지 않은 것은 아니지만, 더 거대한 DB를 설계할 수 있을 정도로 발전해나가는 과정이라고 생각한다면 오히려 좋아...
시작부터 완벽한 설계는 없다는 것을 알기에 초안은 바탕으로 지속적으로 수정해나가면서 진행할 예정이다.