[CS] 데이터베이스 설계

눈치없어·2025년 4월 7일

효율적으로 테이블을 설계하고 관리하는 방법


ER 다이어그램

ER 다이어그램 or ERD: 엔티티 관계를 나타내는 그림

📌 ERD의 목적

  • 데이터베이스에 저장되는 엔티티의 구조를 모델링하는 것을 목적
  • 데이터베이스로 구현할 대상을 시각적으로 설계하는 것
  • ERD는 데이터베이스 설계의 초기 단계에서 매우 중요한 역할

📌 ERD를 활용하면 좋은 점

  • 데이터베이스 구조를 명확하게 정의할 수 있음
  • 향후 데이터베이스를 확장하거나 수정할 때 영향 범위를 쉽게 파악 가능
  • 개발자 간의 원활한 소통과 협업에 도움
  • 유지보수가 쉬워짐

📌 ERD 없이 무작정 테이블부터 만들면 생기는 문제

  • 처음부터 잘못된 구조로 개발을 시작하게 됨. "첫 단추를 잘못 꿰는" 셈
  • 시간이 지나면서 유지보수가 어려워지고, 결국 구조 변경에 많은 시간이 소요됨
  • 이미 많은 레코드가 쌓여 있다면 수정은 더 복잡하고 부담스러움
  • 비효율적인 설계는 데이터의 중복과 불일치를 유발할 수 있음
  • 이는 결국 성능 저하로 이어질 수 있음

ERD 표기 방식

📌 피터 첸 표기법

  • 엔티티와 관계를 개념적으로 모델링하는 데 유용한 방식
  • 그러나 엔티티가 많아지면 다이어그램이 복잡해지고,
    이를 RDBMS의 테이블 구조로 해석하기 어려울 수 있다는 단점도 존재

📌 현대 실무형 ERD – IE 표기법

  • 현재는 실무에서 RDBMS 모델링을 위해 위와 같은 직관적인 테이블 중심의 ERD가 많이 사용됨
  • 이 방식은 IE 표기법(Information Engineering Notation)이라고 불리며,
    별명으로 '새발 표기법' 또는 '까마귀 발 표기법'이라고도 불림. 테이블 간 관계를 나타내는 선이 마치 새의 발처럼 생겼기 때문

📌 현대 실무형 ERD – IE 표기법

  • 사각형 하나가 테이블 하나를 의미함
  • 상단에는 테이블 이름
  • 중간 ~ 하단에는 필드 목록(속성)
    - 기본키(PK)는 밑줄 또는 'PK'로 표기
    - 외래키(FK)는 'FK'로 표기하기도 함
    - 필드의 데이터 타입도 함께 명시하는 경우가 많음

피터 첸 표기법: 개념적 설계에 적합
IE 표기법: 실무 설계에 적합


📌 식별/비식별 관계

때로는 ERD에서 엔티티 간의 연결선을 실선과 점선으로 구분하여 표기하기도 함

  • 실선: 식별 관계를 의미
  • 점선: 비식별 관계를 의미
  • 식별 관계
    - 참조되는 엔티티가 존재해야만 참조하는 엔티티가 존재할 수 있는 관계
    - 참조되는 테이블의 기본 키를 참조하는 테이블의 외래 키이자 기본 키로 활용하는 경우 식별 관계
  • 비식별 관계
    - 참조되는 엔티티가 존재하지 않아도 참조하는 엔티티가 존재할 수 있는 관계
    - 참조되는 테이블의 기본 키를 참조하는 테이블의 기본 키가 아닌 일반적인 외래 키로 이용할 경우 비식별 관계

ERD를 그리기 위한 도구
draw.id / ERWin / ERDCloud 등이 대표적



정규화

데이터 중복과 이상을 방지하기 위해 테이블을 잘 조직하고 필요시 분리하는 과정

  • 정규화된 테이블 형태를 정규형(Normal Form, NF)이라고 부름
  • 정규화는 단순히 보기 좋게 나누는 게 아니라, 잠재적인 문제(삽입/갱신/삭제 이상)를 예방하기 위한 '규칙'

정규화를 잘 이해하고 활용하면, 유지보수성, 확장성, 성능까지 잡을 수 있음


📌 정규화 이전 테이블 예제


📌 제1 정규형

  • 모든 속성이 원자값을 가져야 함
  • 하나의 필드에 복수 값이 들어가면 안 됨
  • 중복을 감수하고 하나의 테이블로 정리
  • 또는, 테이블을 분리하여 정규화


📌 제2 정규형

  • 제1 정규형을 만족하면서, 기본키가 아닌 모든 필드가 기본키 전체에 완전히 종속되어야 함
  • 특히 기본키가 복합키일 때(2개 이상의 필드로 구성) 주의
  • 일부 키에만 종속된 필드가 있다면, 부분 함수 종속성 발생 → 위반
  • 부분 함수 종속성: 기본 키가 아닌 필드가 기본 키의 일부에 종속되어 있는 경우
  • 완전 함수 종속성: 키본 키 전체에 완전하게 종속되어 있는 경우

즉, 제2 정규형은 부분 함수 종속성이 없는 상태, 후보 키에 속하지 않는 모든 필드가 기본 키에 완전 함수 종속인 상태라고 할 수 있음

이 테이블에서 이름학번과의 종속 관계는 있을 수 있지만, 과목과는 관계가 없으므로 제2 정규형을 만족하지 않음

다음과 같이 테이블을 분할해야 제2 정규형을 만족하는 상태가 됨


📌 제3 정규형

  • 제2 정규형을 만족하면서, 기본키가 아닌 필드들이 이행적 종속을 가지면 안됨
  • 이행적 종속: A → B → C 라면, A → C도 되므로 C는 A에 이행적으로 종속
  • 즉, 기본키가 아닌 필드끼리 서로 종속되면 안됨

학번학과로 구성된 테이블. 학과학과 사무실 위치로 구성된 테이블로 쪼갤 경우 제3 정규형을 만족하게 됨


📌 보이스/코드 정규형(BCNF)

  • 제3 정규형을 만족하면서, 모든 결정자가 후보키여야 함
  • 결정자: 다른 속성의 값을 결정할 수 있는 속성 (예: A → B에서 A는 결정자)

이 테이블은 이행적 종속 관계에 있는 필드가 없기 때문에 제3 정규형을 만족하지만 BCNF는 만족하지 않음
담당 교수 필드는 키가 아니지만, 과목 코드의 결정자 역할을 하기 때문
따라서 이 경우에는 학번과목 코드 필드를 하나의 테이블로, 과목 코드담당 교수 필드를 다른 하나의 테이블로 분리해야함


📌 테이블이 정규화 되는 과정


📌 역정규화

정규화를 거듭할수록 데이터는 깔끔하게 분리되고, 이상 현상(중복, 불일치 등)은 줄어듬
하지만 그만큼 테이블 개수가 늘어나고, JOIN 연산이 많아지며, 성능 저하가 발생할 수도 있음

역정규화(De-normalization): 성능 향상을 위해 정규화된 테이블을 다시 통합하거나, 정규화를 일부러 수행하지 않는 것

정규화는 분명 중요한 설계 기법이지만, 항상 정답은 아니며,
상황에 따라 정규화와 역정규화를 적절히 조합하는 것이 실무의 핵심




참고: 북스터디 - 이것이 취업을 위한 컴퓨터 과학이다 (Chapter 6-5)

profile
dock 사이즈 다르잖아

0개의 댓글