[데이터베이스] 4주차 스터디 정리

yongh·2024년 10월 21일
post-thumbnail

📋이상 현상(Anomaly)

  • 이상 현상은 데이터베이스의 설계가 잘못되어 데이터 무결성이 깨지는 것을 의미합니다.
  • 대표적으로 삽입 이상, 삭제 이상, 갱신 이상이 있으며, 정규화를 통해 이상 현상을 해결할 수 있습니다.

✏️삽입 이상(Insertion Anomaly)

데이터의 중복이 발생할 수 있으며, 입력 실수로 인해 같은 데이터가 다르게 입력될 수 있습니다.

특정 컬럼에 해당하는 값이 없어서 NULL을 입력해야 하는 문제가 발생할 수 있습니다.

✏️삭제 이상(Deletion Anomaly)

의도치 않게 연관된 데이터까지 같이 삭제되는 문제가 발생할 수 있습니다.

이렇게 처리할 수도 있지만, NULL이 많이 사용되고 부자연스럽습니다.

✏️갱신 이상(Update Anomaly)

부서 이름이 변경되어 해당 부분을 모두 업데이트하려고 했으나, 작업이 누락되어 일부만 수정된 경우 데이터의 일관성이 깨질 수 있습니다.

NULL 값이 많을 때의 문제점

  • NULL 값이 있는 컬럼으로 조인하면, 상황에 따라 의도한 결과와 다르게 나타날 수 있습니다.
  • COUNT(column_name)는 NULL 값을 포함하지 않고, COUNT(*)는 NULL 값을 포함한 전체 튜플 수를 반환합니다. 이에 따라 의도치 않은 결과가 발생할 수 있습니다.
  • NULL 값이 많으면 저장 공간이 낭비될 수 있습니다.

📋함수 종속성(Functional Dependency)

한 테이블에 있는 두개의 컬럼 집합 사이의 제약을 의미합니다. 아래 그림에서, X의 값이 같으면 Y도 같습니다.
X가 Y를 함수적으로(유니크하게) 결정한다.
Y가 X에 함수적으로 의존한다.
라고 할 수 있고, 두 집합 사이의 이런 제약 관계를 함수 종속성이라고 합니다.


다음 처럼 동명이인이 있을 수 있기 때문에 empl_name과 birth_date 사이에 함수 종속성은 존재하지 않습니다.

테이블에서 어떤 속성의 값이 다른 속성의 값을 결정하는 성질을 함수적 종속성이라고 합니다.

예를들어 A라는 테이블에 속성 X의 값에 대해 속성 Y의 값이 오직 하나만 연관되어 있을때 Y는 X에 함수적으로 종속된다고 합니다.

이때 X를 결정자, Y를 종속자라고 합니다.

✏️부분 함수 종속(Partial Functional Dependency)

  • 부분 함수 종속은 속성 X가 속성 Y에 대해서 함수적 종속일 때, X의 진부분집합에 대해서도 함수적 종속인 경우를 말합니다.
  • 예를 들어 기본키를 포함하는 복합키에 대해 종속적인 경우, 부분 함수 종속이라고 할 수 있습니다.

진부분집합(Proper Subset)

집합 X의 진부분집합은 X의 부분집합이지만, X와 동일하지는 않은 집합을 의미합니다.
예를 들어, X = {a, b, c}일 때, {a, b}, {a, c}, {a}, {} 등은 모두 X의 진부분집합이지만, {a, b, c}는 X의 진부분집합이 아닙니다.


✏️완전 함수 종속(Full Functional Dependency)

  • 완전 함수 종속은 어떤 테이블에서 속성 X가 속성 Y에 대해서 함수적 종속이고, X의 진부분집합에 대해서는 함수적 종속이 아닌 경우를 말합니다.
  • 예를 들어 {student_id, class_id} -> {grade} 관계일 때, 함수적 종속은 맞지만, {student_id} 혹은 {class_id}만으로는 {grade}를 특정지을 수 없습니다.

✏️이행 함수 종속(Transitive Functional Dependecy)

  • 이행 함수 종속은 테이블에서 속성 X가 속성 Y에 대해서 함수적 종속이고, 속성 Y가 속성 Z에 대해서 함수적 종속일 때, 속성 X가 속성 Z에 함수적 종속인 경우를 말합니다.
  • 또한 속성 Y와 Z가 어떤 키에 대해서도 부분집합이 아니어야 합니다.

📋정규화(Normalization)

  • 정규화란 데이터 중복과 이상현상을 최소화하기 위해 테이블을 분리하는 작업을 의미합니다.
  • 정규화 되기 위해 준수해야 하는 규칙들을 NF(Normal Form)이라고 부릅니다.
  • 1NF ~ BCNF까지는 함수 종속성과 key만으로 정의되는 NF입니다.
  • 보통 3NF에 도달하면 정규화 됐다고 말하기도 합니다.

  • 정규화 과정을 위한 예시 테이블

✏️제1 정규형(1NF)

  • 테이블의 모든 속성이 원자값으로만 구성된 정규형을 의미합니다.

✏️제2 정규형(2NF)

  • 제1 정규형을 만족합니다.
  • 기본키의 일부분에만 의존하는 부분 함수 종속이 제거된 상태의 정규형을 의미합니다.

✏️제3 정규형(3NF)

  • 제2 정규형을 만족합니다.
  • 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수 종속이 제거된 상태의 정규형을 의미합니다.

✏️보이스-코드 정규형(BCNF)

  • 제3 정규형을 만족합니다.
  • 보이스-코드 정규형은 테이블의 모든 결정자 속성이 후보키인 정규형을 의미합니다.

📋역정규화

  • 역정규화란 정규화로 분리된 테이블들을 성능상의 이유로 다시 합치는 작업을 의미합니다.
  • 결국 과도한 조인과 중복 데이터 최소화 사이에서 적정 수준을 잘 선택하여 DB를 설계해야 합니다.

✳️ 참고 자료

0개의 댓글