포스트

Day90 Final Project(DB모델링)

DB모델링

3. DB모델링 절차

6) 제 2 정규화

  • 제2정규화(Second Normal Form, 2NF)는 데이터베이스 설계에서 테이블의 데이터를 중복 없이 효율적으로 저장하기 위한 정규화 과정 중 하나다. 제2정규화의 목표는 부분 함수 종속성을 제거하여 데이터의 무결성을 높이고 중복을 최소화하는 것이다.

제2정규화 조건

  • 제2정규화를 적용하려면 먼저 테이블이 제1정규형(1NF)이어야 한다. 즉, 테이블이 원자 값(atomic value)만을 가지고 있어야 한다. 제1정규형을 만족한 후에, 제2정규형을 만족하기 위해서는 다음 두 가지 조건을 만족해야 한다.
  1. 테이블이 제1정규형이어야 한다.
    • 테이블 내의 모든 속성값이 원자 값을 가져야 하며, 각 열에 저장된 값은 더 이상 나눌 수 없는 최소 단위여야 한다.
  2. 부분 함수 종속성을 제거해야 한다.
    • 부분 함수 종속성은 복합 기본 키(Primary Key)를 가진 테이블에서 발생할 수 있다. 기본 키의 일부만을 이용하여 결정되는 속성이 있을 경우, 이를 부분 함수 종속성이라고 한다. 제2정규형에서는 기본 키의 일부에 의해서 결정되는 속성이 없어야 하며, 테이블의 모든 비기본 키 속성은 기본 키 전체에 종속되어야 한다.

예시

예를 들어, 학생 수업 정보를 담은 테이블이 있다고 가정해 보자.

학번 (Primary Key)과목명 (Primary Key)교수명학생 이름
101데이터베이스김교수홍길동
101운영체제이교수홍길동
102데이터베이스김교수박철수

위 테이블은 제1정규형을 만족하지만, 제2정규형은 만족하지 않는다. 그 이유는 비기본 키인 “학생 이름”이 “학번”에 의해 결정되기 때문이다. 즉, 부분 함수 종속성이 발생한 것이다. “학생 이름”은 “과목명”에 종속되지 않고, “학번”에만 종속되어 있어 부분 종속을 제거할 필요가 있다.

이를 제2정규형으로 변환하면 다음과 같은 두 개의 테이블로 나눌 수 있다.

학생 테이블 (Student Table):

학번 (Primary Key)학생 이름
101홍길동
102박철수

수업 테이블 (Class Table):

학번 (Primary Key)과목명 (Primary Key)교수명
101데이터베이스김교수
101운영체제이교수
102데이터베이스김교수

이제 각 비기본 키 속성은 전체 기본 키에 종속되며, 부분 함수 종속성이 제거되었다. 이로써 제2정규형을 만족하게 된다.

제2정규형은 데이터 중복을 줄이고 무결성을 유지하는 데 매우 유용하며, 다음 단계인 제3정규형(3NF)으로 이어지는 기반을 마련해 준다.

7) 제 3 정규화

  • 제3정규화(Third Normal Form, 3NF)는 데이터베이스 정규화 과정 중 하나로, 데이터 중복을 더 줄이고 데이터의 무결성을 강화하기 위해 사용된다. 제3정규화의 목표는 이행적 함수 종속성을 제거하는 것이다.

제3정규화 조건

  • 제3정규화를 적용하려면 먼저 테이블이 제2정규형(2NF)을 만족해야 한다. 그 후, 제3정규화를 만족하기 위해서는 다음 조건을 충족해야 한다.
  1. 테이블이 제2정규형이어야 한다.
    • 제2정규형에서는 모든 비기본 키 속성이 기본 키 전체에 종속되어야 한다.
  2. 이행적 함수 종속성을 제거해야 한다.
    • 이행적 함수 종속성은 기본 키에 직접 종속되지 않고, 다른 비기본 키 속성을 통해 간접적으로 종속되는 경우다. 즉, 비기본 키 A가 비기본 키 B에 종속되고, B가 기본 키에 종속될 때, A는 기본 키에 이행적으로 종속되었다고 한다. 제3정규형에서는 이런 이행적 종속성을 제거해야 한다.

예시

아래와 같은 학생 정보를 담은 테이블을 예로 들어보자.

학번 (Primary Key)학생 이름학과 코드학과 이름
101홍길동CSE컴퓨터공학과
102박철수ECE전자공학과

이 테이블은 제2정규형을 만족하지만, 제3정규형은 만족하지 않는다. 그 이유는 이행적 함수 종속성이 있기 때문이다. “학과 이름”은 “학번”에 직접 종속되지 않고, “학과 코드”를 통해 간접적으로 종속된다. 즉, “학과 이름”은 “학과 코드”에 종속되고, “학과 코드”는 “학번”에 종속되므로, “학과 이름”은 “학번”에 이행적으로 종속된 것이다.

이를 제3정규형으로 변환하려면 테이블을 두 개로 나누어야 한다.

학생 테이블 (Student Table):

학번 (Primary Key)학생 이름학과 코드
101홍길동CSE
102박철수ECE

학과 테이블 (Department Table):

학과 코드 (Primary Key)학과 이름
CSE컴퓨터공학과
ECE전자공학과

이제 “학과 이름”은 “학과 코드”에 직접 종속되며, 더 이상 이행적 종속이 발생하지 않는다. 따라서 이 테이블들은 제3정규형을 만족하게 된다.

제3정규화의 장점

  • 데이터 중복 최소화: 이행적 종속성을 제거함으로써 데이터 중복을 줄일 수 있다.
  • 데이터 무결성 향상: 데이터가 변경될 때, 중복 데이터로 인해 발생할 수 있는 오류를 방지할 수 있다.

제3정규형은 일반적으로 실무에서 많이 사용되는 정규화 단계 중 하나로, 데이터베이스 성능과 무결성을 균형 있게 유지하는 데 중요한 역할을 한다.

4. 테이블간의 관계 식별

1) 일반 관계

2) 다대다 관계 해소

3) 포함 관계 및 배타적 관계

5. Unique 컬럼 지정

6. null 허용여부 지정

7. Index컬럼 지정

물리모델링

1. DBMS 테이블명 및 컬럼명 지정

2. 도메인 적용

3. auto increase 및 default 값 설정

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.