Database

📁 DB 모델링과 ERD 다이어그램 이해하기

2025. 4. 18. 10:31
반응형

이전 포스팅

1. 데이터베이스 모델링이란?

▶ DB 모델링의 정의

데이터베이스 모델링은 현실 세계의 개체(Entity)와 이들 사이의 관계(Relationship)를 데이터 구조로 표현하여 데이터베이스에 적용할 수 있도록 설계하는 과정입니다.

▶ 왜 모델링이 중요한가

  • 개발 방향과 데이터 흐름을 명확히 정리할 수 있다.
  • 데이터 중복을 줄이고 무결성을 확보할 수 있다.
  • 변경과 확장에 유연한 구조를 설계할 수 있다.
  • 구조를 시각화하여 협업과 유지보수에 용이하다.

▶ 논리 모델 vs 물리 모델

구분논리 모델물리 모델

정의 개념적 설계 실제 구현 구조
표현 방식 ERD, 관계 설정 등 SQL 스키마, 인덱스 등
사용 대상 기획자, 개발자 DBA, 백엔드 개발자

2. ERD(Entity Relationship Diagram)란?

▶ ERD의 역할과 목적

ERD는 데이터베이스 구조를 도식화한 다이어그램으로, 테이블 간 관계와 구조를 시각적으로 표현해줍니다. 이를 통해 데이터 흐름과 설계 방향을 쉽게 이해하고 논의할 수 있습니다.

▶ ERD 구성 요소

  • Entity (엔터티): 테이블에 해당하는 구성요소
  • Attribute (속성): 테이블의 컬럼 정보
  • Relationship (관계): 테이블 간의 연결 관계를 나타내는 선

3. 관계의 종류와 의미

관계는 데이터베이스의 테이블 간 연결 방식을 정의하며, 올바른 설계를 위해서는 관계의 유형을 정확히 이해해야 합니다. 대표적인 관계는 1:1, 1:N, N:M 세 가지가 있으며, 각 관계는 외래키(Foreign Key)의 위치와 구조에 차이를 가집니다.

▶ 1:1 관계

  • 하나의 엔터티가 오직 하나의 엔터티와만 연결됨
  • 예: 사용자 ↔ 사용자 프로필
  • 외래키는 어느 쪽에 있어도 되지만, 보통 더 자주 조회되는 쪽에 둡니다
Table users {
  id int [pk]
  name varchar
}

Table user_profiles {
  id int [pk]
  user_id int [ref: > users.id, unique]
  bio text
}

▶ 1:N 관계

  • 하나의 엔터티가 여러 엔터티와 연결됨
  • 예: 블로그 ↔ 게시글, 사용자 ↔ 주문
  • 외래키는 "여러 개"를 가지는 테이블에 위치
Table blogs {
  id int [pk]
  title varchar
}

Table posts {
  id int [pk]
  blog_id int [ref: > blogs.id]
  title varchar
}

▶ N:M 관계

  • 다수와 다수가 연결되는 구조
  • 예: 학생 ↔ 수업
  • 반드시 중간 테이블을 통해 1:N + N:1 구조로 분리
Table students {
  id int [pk]
  name varchar
}

Table classes {
  id int [pk]
  name varchar
}

Table enrollments {
  student_id int [ref: > students.id]
  class_id int [ref: > classes.id]
  enrolled_at datetime
}

이처럼 각 관계는 ERD 설계에서 매우 중요하며, 관계의 방향성과 외래키의 위치를 정확히 이해하고 적용하는 것이 핵심입니다.

4. ERD 다이어그램에서 사용되는 기호

ERD에서는 테이블 간 관계를 시각적으로 나타내기 위해 다양한 관계 기호를 사용합니다. 이 기호들은 연결의 방향과 필수 여부, 데이터 수량을 의미합니다.

▶ ERD 관계 기호 예시

| 관계 기호 | 의미       | 설명                                               |
|-----------|------------|----------------------------------------------------|
| |—|       | 필수 1     | 반드시 하나와만 연결 (예: 사용자 ↔ 주민등록정보) |
| O—|       | 선택 1     | 없어도 되고 하나만 연결 (예: 사용자 ↔ 프로필 이미지) |
| |—<       | 필수 다수  | 최소 하나 이상 연결 (예: 사용자 ↔ 게시글)        |
| O—<       | 선택 다수  | 0개 이상 연결 가능 (예: 상품 ↔ 리뷰)              |

※ 일부 ERD 툴에서는 위 기호들이 다르게 표현될 수 있으므로 사용 중인 툴의 표현 규칙도 함께 확인하는 것이 좋습니다.

▶ 관계선 해석 방법

  • |는 필수, O는 선택(optional) 관계를 의미합니다.
  • <는 다수(Many) 관계이며, 보통 외래키가 있는 방향을 가리킵니다.

관계 기호는 설계 의도를 명확히 표현하는 수단이므로, 정확한 의미와 위치를 이해하고 사용해야 데이터 무결성과 확장성을 보장할 수 있습니다.

  • (이미지 예시: ERD 관계선 시각화)

5. ERD 작성 시 자주 나오는 예시

▶ 사용자(User) ↔ 게시글(Post)

Table users {
  id int [pk]
  name varchar
}

Table posts {
  id int [pk]
  user_id int [ref: > users.id]
  title varchar
}

▶ 게시판(Board) ↔ 댓글(Comment)

  • 게시판 1개에 여러 댓글이 연결됨 → 1:N 관계

▶ 제품(Product) ↔ 리뷰(Review)

  • 하나의 제품에 여러 리뷰 → 1:N 관계

▶ 카테고리(Category) ↔ 상품(Item)

  • 카테고리 1개는 여러 상품을 포함 → 1:N 관계

6. ERD 툴 소개 및 사용법 예시

▶ dbdiagram.io란?

  • 웹 기반 ERD 설계 툴
  • DBML, SQL, PostgreSQL, MySQL 등 다양한 포맷 지원
  • 설계한 구조를 코드로 관리하거나 시각화 가능

▶ 예시 DBML 코드

Table students {
  id int [pk]
  name varchar
}

Table classes {
  id int [pk]
  name varchar
}

Table enrollments {
  student_id int [ref: > students.id]
  class_id int [ref: > classes.id]
}
  • enrollments 테이블을 통해 다대다 관계를 표현

7. ERD 설계 시 실수 방지 팁

▶ 실무에서 자주 발생하는 실수

  • 관계 방향을 잘못 설정해 참조 무결성 오류가 발생함
  • 외래키 설정은 했지만 인덱스를 누락하여 성능 저하 초래
  • 다대다 관계를 직접 연결하려고 하고 중간 테이블을 생략함
  • 컬럼 이름에 의미 없는 축약어나 중복된 이름을 사용해 가독성 저하
  • 테이블마다 일관되지 않은 명명 규칙 사용으로 유지보수 어려움
  • 정규화가 과도하거나 부족하여 데이터 중복 또는 복잡성 증가
  • 날짜, 숫자 등 데이터 타입을 적절히 사용하지 않아 정렬/연산 오류 발생
  • ERD 상에 정의된 관계를 실제 DB에 구현하지 않아 무결성 누락

▶ 실수 방지 방법

  • 관계를 설계할 때 반드시 1:1, 1:N, N:M 중 어떤 구조인지 먼저 명확히 판단
  • 외래키가 있는 컬럼에는 인덱스를 반드시 설정하여 성능을 보장
  • 다대다 관계는 항상 중간 테이블을 통해 풀어서 구현
  • 테이블 및 컬럼 이름은 팀에서 정의한 명명 규칙을 따르고, 축약어는 지양
  • 논리 모델링 단계에서 충분한 리뷰를 거쳐 정규화/비정규화의 균형을 맞춤
  • 데이터 타입은 목적에 맞게 사용하고, 특히 날짜와 숫자는 주의하여 설정
  • ERD 작성 시 정의한 제약 조건(FK, UNIQUE 등)은 DB에 모두 반영되도록 함
  • 설계 초기에 팀원들과 ERD를 공유하고 피드백을 받아 재검토하는 과정 마련

ERD와 DB 모델링은 단순히 데이터를 저장하기 위한 구조가 아니라, 데이터 흐름과 시스템 전체의 안정성을 결정짓는 설계 핵심입니다.

▶ 시작을 위한 팁

  • 요구사항을 바탕으로 개체와 관계부터 명확히 정리
  • ERD는 반복적으로 검토하고 개선하는 구조로 접근
  • 너무 많은 관계보다는 명확하고 단순한 구조로 시작하는 것이 좋습니다.
반응형

'Database' 카테고리의 다른 글

DBMS 선택 가이드: 프로젝트에 맞는 데이터베이스 고르기 (DBMS Selection Guide)  (1) 2025.06.13
DB ERD 관계선(실선, 점선)과 기호에 대한 설명  (2) 2019.01.02
MySQL 패스워드 분실시 대안 방법.  (0) 2013.02.26
Informix Data Type  (0) 2010.09.14
무료 MSSQL툴 - Microsoft SQL Server Management Studio Express  (0) 2010.07.15
'Database' 카테고리의 다른 글
  • DBMS 선택 가이드: 프로젝트에 맞는 데이터베이스 고르기 (DBMS Selection Guide)
  • DB ERD 관계선(실선, 점선)과 기호에 대한 설명
  • MySQL 패스워드 분실시 대안 방법.
  • Informix Data Type
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    위시리스트
    자바
    자바스크립트
    JavaScript
    php
    기초
    IT 관련
    IT블로그
    iT's MY LiFE
    IT·컴퓨터
    Java
    자바스크립트유틸
    디자인패턴
    jsp
    블로그
    SQL
    js패턴
    사고 싶은 책
    It
    읽고 싶은 책
Dongkkase
📁 DB 모델링과 ERD 다이어그램 이해하기
상단으로

티스토리툴바