개발/SQL

데이터베이스 설계 & 정규화: 좋은 테이블 구조 만들기 🏗️

예니03 2025. 3. 1. 18:13
반응형

데이터베이스를 설계할 때 가장 중요한 것은 효율적이고 안정적인 테이블 구조를 만드는 것입니다. 잘못된 설계는 데이터 중복, 무결성 문제, 유지보수 어려움 등을 초래할 수 있기 때문에, 올바른 설계를 위해 정규화(Normalization) 개념을 이해하는 것이 필수적입니다.

 

1. 정규화란?

정규화란 중복을 최소화하고 데이터의 일관성을 유지하기 위해 데이터를 여러 개의 테이블로 나누는 과정입니다. 이를 통해 데이터 무결성을 확보하고 저장 공간을 효율적으로 사용할 수 있습니다.

정규화는 여러 단계(1NF, 2NF, 3NF 등)로 이루어지며, 각 단계마다 데이터 구조를 더욱 체계적으로 정리할 수 있습니다.

 

2. 정규화의 단계

🔹 1차 정규형(1NF: First Normal Form)

조건: 모든 필드에 단일 값만 저장되어야 한다. (즉, 반복되는 데이터가 없어야 함)

예시: 비정규형 테이블

고객ID 고객명 전화번호
101 홍길동 010-1111-2222, 010-3333-4444
102 이순신 010-5555-6666

 

1NF 적용 후

고객ID 고객명 전화번호
101 홍길동 010-1111-2222
101 홍길동 010-3333-4444
102 이순신 010-5555-6666

이제 한 칸에 하나의 값만 존재하도록 정리되었습니다.

 

🔹 2차 정규형(2NF: Second Normal Form)

조건: 1NF를 만족하고, 부분적 함수 종속 제거 (기본키의 일부가 아닌 속성은 기본키 전체에 의존해야 함)

예시: 1NF 테이블

주문ID 고객ID 고객명 상품명
1 101 홍길동 노트북
2 102 이순신 스마트폰
3 101 홍길동 태블릿

 

2NF 적용 후 (고객 정보를 분리)

[고객 테이블]

고객ID 고객명
101 홍길동
102 이순신

[주문 테이블]

주문ID 고객ID 상품명
1 101 노트북
2 102 스마트폰
3 101 태블릿

고객 정보를 따로 분리하여 중복을 줄였습니다.

 

🔹 3차 정규형(3NF: Third Normal Form)

조건: 2NF를 만족하고, 이행적 종속 제거 (즉, 비식별자가 기본키에만 의존해야 함)

예시: 2NF 테이블

주문ID 고객ID 고객명 고객주소
1 101 홍길동 서울시 강남구
2 102 이순신 부산시 해운대
3 101 홍길동 서울시 강남구

 

3NF 적용 후 (고객 정보를 완전히 분리)

[고객 테이블]

고객ID 고객명 고객주소
101 홍길동 서울시 강남구
102 이순신 부산시 해운대

[주문 테이블]

주문ID 고객ID 상품명
1 101 노트북
2 102 스마트폰
3 101 태블릿

이제 고객명과 고객주소가 중복되지 않도록 테이블을 정리했습니다.

 

3. ERD(Entity Relationship Diagram) 그리기

ERD는 데이터베이스 테이블 간의 관계를 시각적으로 표현한 다이어그램입니다. 이를 통해 데이터의 흐름과 구조를 쉽게 이해할 수 있습니다.

🎨 간단한 ERD 예시

  • 고객 (Customer) 테이블 → 고객ID(PK), 고객명, 고객주소
  • 주문 (Order) 테이블 → 주문ID(PK), 고객ID(FK), 상품명

고객과 주문 테이블이 고객ID를 통해 연결됩니다. (PK = 기본키, FK = 외래키)

 

4. 정규화를 하면 좋은 점

데이터 중복 감소 → 저장 공간 절약 ✅ 데이터 무결성 유지 → 변경 시 오류 방지 ✅ 효율적인 검색과 유지보수 가능 → 성능 향상

그러나 정규화를 너무 과하게 하면 조인이 많아져 성능 저하가 발생할 수도 있습니다. 따라서 데이터 사용 패턴에 따라 적절한 정규화 수준을 선택하는 것이 중요합니다!

 

🔥 마무리

데이터베이스 정규화는 올바른 테이블 설계를 위한 필수 과정입니다. 1NF → 2NF → 3NF 단계를 이해하고 적용하면 보다 효율적이고 안정적인 데이터베이스를 설계할 수 있습니다.

실제 프로젝트에서도 정규화를 적용하여 데이터 무결성을 확보하고, 유지보수를 쉽게 할 수 있도록 해보세요! 😊

반응형