RDBMS의 정규화

금은체리·2024년 1월 8일
0

면접

목록 보기
3/15
  1. RDBMS의 정규화에 대해 설명해주세요.

    • 답변 중복데이터 무결성

정규화는 RDBMS(관계형 데이터베이스 관리 시스템)를 설계할 때 데이터 구조를 최적화하기 위해 중복을 최소화하는 프로세스입니다. 정규화를 통해 데이터를 적절하게 구조화하면 이상 현상(Anomaly)을 방지할 수 있습니다.

이상 현상은 정규화를 적용하지 않은 데이터베이스나 테이블에서 데이터의 중복이 발생하고, 이로 인해 작업을 할 때 비합리적인 문제들이 발생하는 현상을 말합니다. 이를 방지하기 위해 정규화를 수행하여 데이터를 적절하게 분리하고 구조화합니다.

간단히 말하면, 정규화는 데이터베이스의 효율성과 일관성을 높이기 위해 중복을 최소화하고 데이터를 구조화하는 작업입니다. 이를 통해 데이터베이스의 성능과 유지보수 용이성을 향상시킬 수 있습니다.


이상현상(Anomaly)

  1. 삽입 이상 (Insertion Anomaly)

    기본키가 {Student ID, Course ID} 인 경우 -> Course를 수강하지 않은 학생은 Course ID가 없는 현상이 발생함. 결국 Course ID를 Null로 할 수밖에 없는데, 기본키는 Null이 될 수 없으므로, Table에 추가될 수 없음.

    굳이 삽입하기 위해서는 '미수강'과 같은 Course ID를 만들어야 함.

    불필요한 데이터를 추가해야지, 삽입할 수 있는 상황 = Insertion Anomaly

  2. 갱신 이상 (Update Anomaly)

    만약 어떤 학생의 전공 (Department) 이 "컴퓨터에서 음악"으로 바뀌는 경우.

    모든 Department를 "음악"으로 바꾸어야 함. 그러나 일부를 깜빡하고 바꾸지 못하는 경우, 제대로 파악 못함.

    일부만 변경하여, 데이터가 불일치 하는 모순의 문제 = Update Anomaly

  3. 삭제 이상 (Deletion Anomaly)

    만약 어떤 학생이 수강을 철회하는 경우, {Student ID, Department, Course ID, Grade}의 정보 중

    Student ID, Department 와 같은 학생에 대한 정보도 함께 삭제됨.

    튜플 삭제로 인해 꼭 필요한 데이터까지 함께 삭제되는 문제 = Deletion Anomaly

       

정규화(Normalization)

목적

  • 데이터의 중복을 없애면서 불필요한 데이터를 최소화시킨다.
  • 무결성을 지키고, 이상 현상을 방지한다.
  • 테이블 구성을 논리적이고 직관적으로 할 수 있다.
  • 데이터베이스 구조를 확장에 용이해진다.

제 1정규화(1NF)

: 테이블 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분리시키는 것

만족해야 할 조건은 아래와 같다.

  • 어떤 릴레이션에 속한 모든 도메인이 원자값만으로 되어 있어야한다.
  • 모든 속성에 반복되는 그룹이 나타나지 않는다.
  • 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다.

현재 테이블은 전화번호를 여러개 가지고 있어 원자값이 아니다. 따라서 1NF에 맞추기 위해서는 아래와 같이 분리할 수 있다.


제 2정규화(2NF)

테이블의 모든 컬럼이 완전 함수적 종속을 만족해야 한다.
조금 쉽게 말하면, 테이블에서 기본키가 복합키(키1, 키2)로 묶여있을 때, 두 키 중 하나의 키만으로 다른 컬럼을 결정지을 수 있으면 안된다.

  • 기본키의 부분집합 키가 결정자가 되어선 안된다는 것

ManufactureModel이 키가 되어 Model Full Name을 알 수 있다.
Manufacturer CountryManufacturer로 인해 결정된다. (부분 함수 종속)
따라서, ModelManufacturer Country는 아무런 연관관계가 없는 상황이다.

결국 완전 함수적 종속을 충족시키지 못하고 있는 테이블이다. 부분 함수 종속을 해결하기 위해 테이블을 아래와 같이 나눠서 2NF를 만족할 수 있다.


제 3정규화(3NF)

: 2NF가 진행된 테이블에서 이행적 종속을 없애기 위해 테이블을 분리하는 것

이행적 종속 : A → B, B → C면 A → C가 성립된다

아래 두가지 조건을 만족시켜야 한다.

  • 릴레이션이 2NF에 만족한다.
  • 기본키가 아닌 속성들은 기본키에 의존한다.
    현재 테이블에서는 TournamentYear이 기본키다.
    Winner는 이 두 복합키를 통해 결정된다.
    하지만 Winner Date of Birth는 기본키가 아닌 Winner에 의해 결정되고 있다.
    따라서 이는 3NF를 위반하고 있으므로 아래와 같이 분리해야 한다.

참고

링크

    
profile
전 체리 알러지가 있어요!

0개의 댓글