[글쓴이:] cooler8

  • 데이터베이스 정규형 쉬운 설명


    제1정규형 (1NF): 데이터를 나누자!

    조건

    • 모든 데이터는 하나의 값만 가져야 해요. (원자값, Atomic Value)
    • 각 칸(셀)에 값이 하나만 들어가야 해요.

    예시

    학생 이름과목선생님
    철수수학, 영어김선생님
    영희과학이선생님

    문제:

    • “철수”가 듣는 과목이 하나의 칸에 여러 개(수학, 영어)가 들어가 있어요.

    1NF로 변환:

    학생 이름과목선생님
    철수수학김선생님
    철수영어김선생님
    영희과학이선생님

    제2정규형 (2NF): 부분 중복 없애자!

    조건

    • 1NF를 만족해야 해요.
    • 기본 키(Primary Key)의 일부만으로 다른 값을 결정할 수 있으면 안 돼요. (부분 함수 종속성 제거)

    예시

    학생 이름과목선생님
    철수수학김선생님
    철수영어김선생님
    영희과학이선생님

    문제:

    • “선생님”은 “과목”만 보면 결정할 수 있어요. 즉, “학생 이름”은 필요 없어요.

    2NF로 변환: *직접 해보세요

    1. 학생과 과목: 학생 이름 과목 철수 수학 철수 영어 영희 과학
    2. 과목과 선생님: 과목 선생님 수학 김선생님 영어 김선생님 과학 이선생님

    제3정규형 (3NF): 간접 연결 없애자!

    조건

    • 2NF를 만족해야 해요.
    • 한 속성이 다른 속성을 거쳐서 결정되지 않도록 해야 해요. (이행 함수 종속성 제거)

    예시

    학생 이름과목학교
    철수수학서울중학교
    철수영어서울중학교
    영희과학대전중학교

    문제:

    • “학교”는 “학생 이름”으로 바로 결정돼요. “과목”이 필요 없어요.

    3NF로 변환: *직접 해보세요

    1. 학생과 학교: 학생 이름 학교 철수 서울중학교 영희 대전중학교
    2. 학생과 과목: 학생 이름 과목 철수 수학 철수 영어 영희 과학

    제4정규형 (4NF): 독립적인 정보는 따로 저장하자!

    조건

    • 3NF를 만족해야 해요.
    • 하나의 속성이 다른 속성과 독립적으로 관련이 있다면, 이를 따로 분리해야 해요. (다중치 종속성 제거)

    예시

    학생 이름동아리악기
    철수음악부피아노
    철수음악부바이올린
    철수체육부피아노
    철수체육부바이올린

    문제:

    • “동아리”와 “악기”는 서로 상관이 없어요. “학생 이름”과 독립적으로 연결돼요.

    4NF로 변환: *직접 해보세요

    1. 학생과 동아리: 학생 이름 동아리 철수 음악부 철수 체육부
    2. 학생과 악기: 학생 이름 악기 철수 피아노 철수 바이올린

    정리

    정규형문제 해결쉽게 말하면
    1NF데이터를 하나의 값으로 나눔중복된 셀 없게 깔끔히 나누기
    2NF기본 키의 일부로 다른 값을 결정하지 않음부분 중복 없애기
    3NF간접 연결을 없앰불필요한 경로 없애기
    4NF독립적인 정보는 따로 저장서로 독립적인 데이터 분리하기

    결국 하나의 테이블에 이상한 정보를 모두 한꺼번에 넣으면 안되고, 잘 나누어야 한다는 이야기입니다~

    1NF로 변환:

    학생 이름과목선생님
    철수수학김선생님
    철수영어김선생님
    영희과학이선생님

    2NF로 변환:

    학생과 과목

    학생 이름과목
    철수수학
    철수영어
    영희과학

    과목과 선생님:

    과목선생님
    수학김선생님
    영어김선생님
    과학이선생님

    3NF로 변환:

    학생과 학교:

      학생 이름학교
      철수서울중학교
      영희대전중학교

      학생과 과목:

      학생 이름과목
      철수수학
      철수영어
      영희과학

      4NF로 변환:

      학생과 동아리:

      학생 이름동아리
      철수음악부
      철수체육부

      학생과 악기:

      학생 이름악기
      철수피아노
      철수바이올린

      모두 잘 푸셨으면, 정확히 이해하셨어요! 🎉 제2정규형부터는 테이블을 더 나누어서 데이터 중복을 줄이고, 데이터를 효율적으로 관리할 수 있도록 설계하는 것이 핵심이에요. 간단히 요약하자면:


      1. 제1정규형 (1NF): 원자값으로 나누기

      • 데이터를 한 셀에 하나씩 저장하게 만드는 단계예요.
      • 이 과정은 테이블을 나누는 게 아니라, 셀 속의 데이터를 잘게 쪼개는 작업이에요.

      2. 제2정규형 (2NF): 부분 종속성을 제거하기 위해 테이블 분리

      • 1NF를 만족한 상태에서, 기본 키의 **일부만으로 결정되는 데이터(부분 종속)**를 따로 떼어내요.
      • 예를 들어, “과목”이 “학생 이름”과 독립적으로 반복되는 경우, “과목”을 따로 테이블로 만들어야 해요.

      3. 제3정규형 (3NF): 간접 종속성을 제거하기 위해 테이블 분리

      • 2NF를 만족한 상태에서, 어떤 속성이 다른 속성을 거쳐 결정되는 경우(이행 종속성)를 분리해요.
      • 예를 들어, “학생 이름”이 “학교”를 결정하고, “학교”가 “주소”를 결정한다면, “주소”를 따로 저장해요.

      4. 제4정규형 (4NF): 독립적인 정보를 분리하기 위해 테이블 분리

      • 3NF를 만족한 상태에서, 서로 독립적인 속성 집합이 한 테이블에 들어가 있으면, 이를 각각 분리해요.
      • 예를 들어, “동아리”와 “악기”가 서로 독립적이라면, “동아리 정보”와 “악기 정보”를 따로 저장해요.

      정규화를 통해 얻는 장점

      1. 중복 제거: 데이터를 나누어 저장함으로써 불필요한 반복을 줄여요.
      2. 무결성 보장: 데이터를 일관성 있게 유지할 수 있어요.
      3. 업데이트 효율성: 중복된 데이터를 여러 곳에서 수정할 필요가 없어요.

      결론

      제2정규형부터는 데이터의 중복을 없애고 종속 관계를 정리하기 위해 테이블을 더 나누는 작업이라고 볼 수 있어요. 이렇게 하면 데이터를 깔끔하게 정리하고 관리하기 쉽게 만들 수 있답니다. 😊