All Honey Tip

[기술 면접] 5. 정규화(Normalization)에 대해서 설명해보세요.

정규화(Normalization)에 대해서 설명해보세요.

저번 시간에 이어서, 이번엔 정규화(Normalization)에 대해 알아보겠습니다. 정규화는 Data를 효율적으로 구조화하여 사용하기 위한 과정으로, 중복 데이터를 최소화하고 일관성, 유지보수성, 효율성 등을 높이기 위해 사용됩니다. 이번 시간을 통해 정규화 과정에 대해 깊게 공부할 수 있으시길 바랍니다.

image 48





Q: 정규화에 대해서 설명해보세요.

이상 현상이 발생하는 릴레이션을 분해하여, 이상 현상을 없애는 과정입니다. 함수 종속성의 유형에 따라 등급을 구분하고 정규형이 높을수록 이상현상이 줄어듭니다.

데이터의 일관성과 모델의 응집도를 높이는 것을 지향합니다.





Q: 비정규화(반정규화)는 무엇인가요?

조인으로 인한 성능 저하가 예상될 때, 읽기 성능 향상을 위해 정규화된 테이블을 다시 합치는 것으로, 데이터 무결성을 떨어뜨리는 것을 감안합니다.

  • 데이터 무결성 : 데이터의 정확성, 일관성, 유효성을 지키는 것입니다.






Q: 역정규화는 무엇인가요?

비정규화 상태로 만들기 위한 방법 중 하나입니다. DB 비용을 최소화 하고 성능을 개선하기 위해 중복을 허용하여 Entity를 다시 통합하거나 정규화로 도출된 DB 구조를 재조정 하는 것입니다.

주키와 외래키 관계로 이루어진 2개의 Table이 존재할 때, 이 2개의 Table을 1개의 View로 만드는 행위도 역정규화입니다. 읽기 성능을 향상시키면서 데이터 중복을 허용한다고 할 수 있습니다.






Q: 이상 현상이 뭐죠??

삭제 이상, 삽입 이상, 갱신 이상이 있으며, 중복이 발생하거나 무결성에 지장을 주는 현상입니다.

  • 삭제 이상 : 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상입니다.
  • 삽입 이상 : 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL값을 입력해야 하는 현상입니다.
  • 갱신 이상 : 데이터 갱신 시 일관성 유지가 안 되는 현상입니다.


정규형 : 도부이결다조

%EB%8F%84%EB%B6%80%EC%9D%B4%EA%B2%B0%EB%8B%A4%EC%A1%B0
  • 제 1정규형
    • 릴레이션 R의 모든 속성 값이 원자(쪼갤 수 없는) 값을 가집니다.
    • 모든 속성은 한 개의 값을 가집니다.


%EC%A0%9C1
  • 제 2정규형
    • 제 1정규형을 만족한 상태에서 부분 함수 종속을 제거합니다.


%EC%A0%9C2a
%EC%A0%9C2b
  • 제 3정규형
    • 이행적 함수 종속을 제거합니다.


%EC%A0%9C3a
%EC%A0%9C3b
  • BCNF
    • 릴레이션의 모든 결정자가 후보 키인 릴레이션입니다.
    • 후보 키가 아닌 속성이 결정자로 사용되면 안된다는 뜻입니다.


bcnfa
bcnfb
bcnfc
  • 제 4정규형
    • 다치종속(MVD)을 제거합니다.
    • 다치종속이란, A가 {B1, B2 ..} 를 결정하고, {C2, C5..}도 결정. 즉, 하나의 값이 집합 값들을 가리키는 것을 말합니다.
  • 제 5정규형
    • 조인종속을 이용하여 원래의 릴레이션과 차이가 있는지(무손실 분해의 원칙에 어긋나지 않는지), 확인하고 올바른 분해를 합니다.
  • 반 정규화
    • 시스템 성능 향상과 개발 및 운영의 단순화를 위해 데이터 모델을 통합하는 데이터베이스 성능향상 기법입니다.
      • 데이터를 조회할 때 디스크I/O량이 많아 성능이 저하되는 경우
      • 경로가 너무 멀어 조인으로 인한 성능저하가 예상되는 경우
      • 컬럼을 계산하여 읽을 때, 성능 저하기 예상되는 경우






마치며

정규화에 대해 자세히 알아보는 시간을 가졌습니다. 상황에 따라 다르겠지만, 실무에서는 제3 정규형까만 시행하는 경우도 많습니다. 알려진 개념처럼 철저하게 규약을 지키기보다, 당장의 성능과 유지보수를 위해서죠. 특히, DBA / DA가 없는 IT 팀의 경우 이러한 경우가 더욱 빈번할 수 있습니다.

다음 시간에는 View에 대해 알아보겠습니다.

정규화(Normalization)에 대해서 설명해보세요.


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다