https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-db-%EC%84%A4%EA%B3%84-%EC%9E%85%EB%AC%B8/dashboard
이 글은 인프런 박재성님의 DB설계 강좌를 수강하고 정리한 포스트입니다.
정형적인 질문과 답변
Question
RDBMS 에서 데이터 모델링을 할 때는 어떤 점을 유의해야할까요?
Answer
관계형 DB모델링에 있어서는 정규화를 통해 데이터 중복을 최소화해야합니다. 그래야 삽입 이상, 수정 이상, 삭제 이상과 같은 이상현상을 방지하고 데이터 무결성을 지킬 수 있습니다..!
이렇게 이론적으로 제 1정규화, 2정규화, 3정규화, 무결성 등등의 이론을 숙지하고 원론적인 답변을 할 수 있더라도 막상 실제 프로젝트에서 관계형 DB를 설계를 하라고 하면 어떻게 해야할지 망설이는 경우가 많다. 실전적인 측면에서 관계형 DB를 설계해야할 때 유의해야할 사항을 알아보자
실전 DB설계
- 정상적인 경우라면 프로젝트가 시작하기 전에 디자인이 나온 상태일 것이다.
- 피그마 디자인을 살펴보면서 어떤 데이터가 필요한지 되는대로 적어 리스트업한다.
- 리스트 업한 데이터를 서로 연관된 것들끼리 그룹단위로 묶어준다. (이메일, 아이디 등은 유저 그룹으로 묶는다던지)
- 이렇게 묶은 데이터들을 하나의 테이블이라고 생각하자
- 이제 테이블 간의 관계를 설정해주어야한다. 관계 설정에 있어 아래 규칙을 유의한다.
규칙01.
먼저 테이블 한 칸에는 한가지 정보만 들어가야한다.
사용자 테이블에 이메일 컬럼을 넣었다고 가정해보자. 이메일은 한 명의 사용자가 여러개 가지고 있을 수도 있다. 만약 이를 테이블에 나타내면 사용자 엑셀 한 칸에 여러 이메일이 기입될 것이다. 그렇다면 왜 이게 문제일까?
유저 로우, 이메일 컬럼 한 칸에 여러 이메일이 들어가 있고 유저정보 수정작업이 들어갔다고 생각해보자. 이메일 관련 CRUD작업을 할 때마다 콤마 제거, 배열에 집어넣고 빼오는 로직 등등이 수반되며 실수도 많아질 것이다. 이러한 문제를 미리 방지하기 위해 한 칸에는 한가지 정보만 넣는 것이다.
그렇다면 만약 이미 테이블에 규칙1을 지키지 않고 만들어졌다면? 2개 이상의 정보가 들어간 칼럼을 분리한다. 유저 이메일 테이블을 만든다. 그리고 이메일 테이블에 유저 칼럼을 추가해서 유저의 uuid를 넣는다면 한 칸에 한가지 정보만 들어가야하는 규칙을 준수할 수 있다.
규칙02.
어떤 테이블에 외래키(FK)를 넣어도 규칙1을 지킬 수 없다면 중간 테이블을 만든다
하지만 중복된 컬럼을 따로 테이블을 떼어놓더라도 규칙1을 지킬 수 없는 경우가 있다. 예를 들면
이럴경우에는 Foreign Key로 이루어진 중간테이블 하나를 만들어서 규칙01을 준수할 수 있다.
규칙03.
복잡하다면 관계를 파악한다 (1:1, 1:N, N:M)
왜 관계파악을 하는것이 좋을까? 왜냐하면 테이블을 어떻게 구성할지 관계별로 공식이 있기 때문이다. 물론 모든 케이스를 커버치지는 못하지만 많은 경우가 관계파악을 통해 데이터 테이블을 수월하게 만들 수 있다.
먼저 1대1 관계의 경우
1:N의 경우
N:M의 경우
규칙04.
데이터 중복이 발생하는 칼럼이 있는지 확인하기
규칙05.
가짜 중복과 진짜 중복 구별하기
규칙06.
숨어있는 중복 찾기
'Database' 카테고리의 다른 글
채팅SDK ERD 설계하기 (0) | 2025.01.20 |
---|---|
ORM 이란? (0) | 2024.05.05 |