Skip to content

Latest commit

 

History

History
366 lines (278 loc) · 15.2 KB

File metadata and controls

366 lines (278 loc) · 15.2 KB

정규화 (Normalization)

정규화란?

  • 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정
  • 데이터의 중복을 줄이고 데이터 무결성을 개선하기 위해 정규화를 사용함
  • 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 됨
  • 이를 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어들게 됨
  • 정규화는 1NF, 2NF, 3NF, BCNF, 4NF, 5NF가 존재
  • 보통 정규화는 속도나 용량 문제에서 3NF 혹은 BCNF 까지만 하는 경우가 많다고 함
릴레이션(relation)
- 주로 테이블과 같은 의미로 사용되며 데이터의 집합을 의미
- 튜플과 속성으로 구성되어 있음

이상 현상(Anomaly)
1. 삽입 이상(Insertion Anomaly)
    - 데이터의 일부만 삽입할 수 없거나, 불필요한 중복 데이터를 삽입해야 하는 상황이 발생
    - 특정 정보(예: 부서 정보)가 존재하지 않으면, 새로운 직원을 추가할 수 없는 경우
2. 삭제 이상(Deletion Anomaly)
    - 데이터를 삭제할 때, 원하지 않는 중요한 데이터가 함께 삭제될 수 있음.  특정 정보를 삭제하면서 관련된 다른 정보도 함께 사라지는 경우가 발생
    - 특정 직원을 삭제하면서, 그 직원이 속한 부서 정보도 함께 사라지는 경우가 발생할 수 있음
3. 갱신 이상(Update Anomaly)
    - 데이터의 중복으로 인해 데이터 갱신 시 모든 중복된 데이터를 일관되게 수정하지 않으면 중복된 데이터 중 일부만 갱신되어 데이터 불일치가 발생할 수 있음
    - 한 부서의 위치가 여러 레코드에 중복되어 있을 때, 하나만 수정하면 다른 레코드와 불일치가 발생할 수 있음

함수 종속성(Functional Dependency)
- DB에서 속성들간 종속 관계
- 테이블 필드의 종속 관계를 알아야 불필요한 데이터 중복을 줄이고 더욱 논리적으로 만들 수 있게 함
- 데이터 베이스 정규화에 필요한 개념
- Y가 X에 함수 종속적이다라는 것을 표기할 시 X -> Y로 표기되며, 해당 경우 X를 결정자 Y를 종속자라고 부름

정규화의 장점

  • 데이터베이스 변경 시 이상현상을 제거할 수 있음
  • 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 됨
  • 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킴

정규화의 단점

  • 릴레이션의 분해로 인해 릴레이션 간의 JOIN 연산이 많아짐
  • 질의에 대한 응답시간이 느려질수도 있음. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있음
  • 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있음
  • 만약 조인이 많이 발생하여 성능저하가 나타나면 반정규화(De-normalization)을 적용해야함

정규화 암기

  • 정보처리기사 암기를 위해서 정규화는 두부이걸다줘 라고 암기하는 방법이 있음
  • 1정규형 - 도메인이 원자값
  • 2정규형 - 부분 종속성 제거
  • 3정규형 - 이행적 함수 종속 제거
  • BCNF - 결정자이면서 후보키가 아닌 것 제거
  • 4정규형 - 다치 종속 제거
  • 5정규형 - 조인 종속성 제거

제 1 정규형 (1NF)

  • 각 컬럼이 원자 값을 갖도록 테이블을 분해하면 1정규형을 만족함
  • 1 정규형은 다음과 같은 규칙들을 만족해야함
    • 각 컬럼이 하나의 속성만을 가져야 함
    • 하나의 컬럼은 같은 종류나 타입의 값을 가져야 함
    • 각 컬럼이 유일한 이름을 가져야 함
    • 컬럼의 순서가 상관 없어야 함

1NF 전

  • 1NF 적용 전

1NF 후

  • 1NF 적용 후

제 2 정규형 (2NF)

  • 제 2 정규형은 다음과 같은 규칙을 만족해야 함
    • 제 1정규형을 만족
    • 모든 컬럼이 부분적 종속(Partial Dependency)이 없어야 함 == 모든 컬럼이 완전 함수 종속을 만족해야 함
부분 함수 종속 (Partial Functional Dependency)
- 릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키를 구성하는 여러 속성들의 부분집합 중 일부분에만 종속되어 있음

완전 함수 종속 (Full Functional Dependency)
- 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속되어 있음

2NF 전

  • 2NF 적용 전
  • 성적의 특정 값을 알기 위해서는 학생 번호 + 과목이 있어야 하는데 특정 과목의 지됴교수는 과목명만 알면 지도 교수가 누군지 알 수 있음
  • 지도 교수 컬럼은 (학생번호, 과목)에 종속되지 않고 (과목)에만 종속되는 부분적 종속임

2NF 후

  • 2NF 적용 후

제 3 정규형 (3NF)

  • 제 3정규형은 다음과 같은 규칙을 만족해야함
    • 제 2 정규형을 만족해야함
    • 기본키를 제외한 속성들간의 이행 종속성 (Transitive Dependency)이 없어야 함
이행 종속
- A->B, B->C 일 때 A->C 성립하는 것

3NF 전

  • 3NF 적용 전
  • ID를 알면 등급을 알 수 있는데 여기서 이행 종속성이 존재 -> 3정규형을 만족하지 않음

3NF 후

  • 3NF 적용 후

보이스-코드 정규형 (BCNF, Boyce-CoddNarmal Form)

  • 강화된 3정규형으로 모든 결정자가 후보키인 정규형
  • BCNF는 다음과 같은 규칙을 만족해야함
    • 3정규형을 만족해야 함
    • 모든 결정자가 후보키 집합에 속해야함

BCNF 전

  • BCNF 적용 전
  • (학생번호, 과목)이 기본키로 지도 교수를 알 수 있음
  • 하지만 같은 과목을 다른 교수가 가르칠 숟도 있어서 과목->지도교수 종속은 성립하지 않음
  • 지도교수->과목 종속이 성립. 이처럼 후보키 집합이 아닌 컬럼이 결정자가 되어버린 상황을 BCNF를 만족하지 않는다고 함

BCNF 후

  • BCNF 적용 후

제 4 정규형 (4NF)

  • 제 4정규형은 다음과 같은 조건을 만족해야함
    • BCNF을 만족해야함
    • 다치 종속성이 없어야함
다치 종속(Multi Valued Dependency)
- 특정 속성값에 따라 선택적인 속성
- 하나의 결정자가 다른 속성에서 여러 종속자를 결정할 때 다치 종속한다고 함
- 다치 종속은 이중화살표로 표기 ->>
- 두 개의 독립된 속성이 1:N 관계로 대응하는 관계
- A,B,C 세 개의 속성을 가진 릴레이션에서 어떤 복합 속성(A,C)에 대응하는 B값의 집합이 A 종속되고 C값에는 무관할 때 다치 종속이 존재

4NF 전 4NF 전

  • 4NF 적용 전

4NF 후 4NF 후

  • 4NF 적용 후

제 5 정규형 (5NF)

  • 제 5정규형은 다음과 같은 조건을 만족해야함
    • 4정규형을 만족해야함
    • 조인 종속성이 존재
조인 종속(Join Dependency)
- 하나의 릴레이션을 여러개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터 손실이 없음

5NF 전

  • 5NF 적용 전

5NF 후

  • 5NF 적용 후

반정규화 (Denormalization)란?

  • 정규화에 충실하여 모델링을 수행하면 종속성, 활용성은 향상되나 수행속도가 증가 하는 경우가 발생하여 이를 극복하기 위해 성능에 중점을 두어 정규화하는 방법
  • 데이터 모델링 규칙에 얽매이지 않고 수행
  • 시스템이 물리적으로 구현되었을 때 성능향상을 목적으로 함

반정규화 사용시기

  • 정규화에 충실하였으나 수행속도에 문제가 있는 경우
  • 다량의 범위를 자주 처리해야 하는 경우
  • 특정범위의 데이터만 자주 처리하는 경우
  • 처리범위를 줄이지 않고는 수행속도를 개선할 수 없는 경우
  • 요약 자료만 주로 요구되는 경우
  • 추가된 테이블의 처리를 위한 오버헤드를 고려하여 결정
  • 인덱스의 조정이나 부분범위처리로 유도하고, 클러스터링을 이용하여 해결할 수 있는 지를 철저히 검토 후 결정

22-09-08


Ssafy Wizards CS Study

1. 정규화를 하지 않을 경우, 발생할 수 있는 이상현상에 대해 설명해 주세요.

  • 정규화를 하지 않으면, 테이블 간의 종속성을 올바르게 관리하지 못해 여러 이상현상이 발생할 수 있음

1. 삽입 이상(Insertion Anomaly)

- 데이터의 일부만 삽입할 수 없거나, 불필요한 중복 데이터를 삽입해야 하는 상황이 발생
- 특정 정보(예: 부서 정보)가 존재하지 않으면, 새로운 직원을 추가할 수 없는 경우

2. 삭제 이상(Deletion Anomaly)

- 데이터를 삭제할 때, 원하지 않는 중요한 데이터가 함께 삭제될 수 있음.  특정 정보를 삭제하면서 관련된 다른 정보도 함께 사라지는 경우가 발생
- 특정 직원을 삭제하면서, 그 직원이 속한 부서 정보도 함께 사라지는 경우가 발생할 수 있음

3. 갱신 이상(Update Anomaly)

- 데이터의 중복으로 인해 데이터 갱신 시 모든 중복된 데이터를 일관되게 수정하지 않으면 중복된 데이터 중 일부만 갱신되어 데이터 불일치가 발생할 수 있음
- 한 부서의 위치가 여러 레코드에 중복되어 있을 때, 하나만 수정하면 다른 레코드와 불일치가 발생할 수 있음

2. 각 정규화에 대해, 그 정규화가 진행되기 전/후의 테이블의 변화에 대해 설명해 주세요.

정규화 전 테이블

  • 여러 개의 상품이 하나의 주문에 포함될 수 있는 중복된 데이터 테이블
주문번호 고객명 고객주소 상품명 공급업체 공급업체주소
1001 Alice 123 Main St 노트북, 마우스 ABC Electronics 789 Supplier Rd
1002 Bob 456 Elm St 키보드 XYZ Supplies 1010 Market St
1003 Charlie 789 Oak St 노트북 ABC Electronics 789 Supplier Rd

1. 1차 정규화 (1NF)

  • 각 필드는 원자 값을 가져야 하며 중복된 데이터가 제거 됨
주문번호 고객명 고객주소 상품명 공급업체 공급업체주소
1001 Alice 123 Main St 노트북 ABC Electronics 789 Supplier Rd
1001 Alice 123 Main St 마우스 ABC Electronics 789 Supplier Rd
1002 Bob 456 Elm St 키보드 XYZ Supplies 1010 Market St
1003 Charlie 789 Oak St 노트북 ABC Electronics 789 Supplier Rd

2. 2차 정규화 (2NF)

  • 부분적 종속성을 제거(고객 주소는 고객명에 공급업체 주소는 공급업체에 종속됨). 정보와 공급 업체 분리

  • 주문테이블 | 주문번호 | 고객명 | 고객주소 | |----------|---------|-------------| | 1001 | Alice | 123 Main St | | 1002 | Bob | 456 Elm St | | 1003 | Charlie | 789 Oak St |

  • 상품 테이블 | 주문번호 | 상품명 | 공급업체 | 공급업체주소 | 배송업체 | |----------|----------|----------------|--------------------|------------| | 1001 | 노트북 | ABC Electronics| 789 Supplier Rd | FastShip | | 1001 | 마우스 | ABC Electronics| 789 Supplier Rd | FastShip | | 1002 | 키보드 | XYZ Supplies | 1010 Market St | QuickShip | | 1003 | 노트북 | ABC Electronics| 789 Supplier Rd | SafeShip |


3. 3차 정규화 (3NF)

  • 이행적 종속성 제거(공급업체 주소는 공급업체에 종속됨)

  • 주문-상품 테이블 | 주문번호 | 상품명 | 공급업체 | 배송업체 | |----------|----------|----------------|------------| | 1001 | 노트북 | ABC Electronics| FastShip | | 1001 | 마우스 | ABC Electronics| FastShip | | 1002 | 키보드 | XYZ Supplies | QuickShip | | 1003 | 노트북 | ABC Electronics| SafeShip |

  • 공급 업체 테이블 | 공급업체 | 공급업체주소 | |----------------|--------------------| | ABC Electronics| 789 Supplier Rd | | XYZ Supplies | 1010 Market St |


4. 4차 정규화 (4NF)

  • 다치 종속성 제거(하나의 키가 여러 독립적인 속성 집합에 대해 종속된 종속 관계를 가짐)

  • 주문-상품 테이블 | 주문번호 | 상품명 | 공급업체 | |----------|----------|----------------| | 1001 | 노트북 | ABC Electronics| | 1001 | 마우스 | ABC Electronics| | 1002 | 키보드 | XYZ Supplies | | 1003 | 노트북 | ABC Electronics|

  • 주문-배송업체 테이블 | 주문번호 | 배송업체 | |----------|------------| | 1001 | FastShip | | 1002 | QuickShip | | 1003 | SafeShip |


5. 5차 정규화 (5NF)

  • 조인 종속성을 제거. 모든 종속성을 독립된 테이블로 분해하여 복원 가능하게 만듬

  • 주문-상품 테이블 | 주문번호 | 상품명 | |----------|----------| | 1001 | 노트북 | | 1001 | 마우스 | | 1002 | 키보드 | | 1003 | 노트북 |

  • 상품-공급업체 테이블 | 상품명 | 공급업체 | |----------|----------------| | 노트북 | ABC Electronics| | 마우스 | ABC Electronics| | 키보드 | XYZ Supplies |

  • 주문-배송업체 테이블 | 주문번호 | 배송업체 | |----------|------------| | 1001 | FastShip | | 1002 | QuickShip | | 1003 | SafeShip |


3. 정규화가 무조건 좋은가요? 그렇지 않다면, 어떤 상황에서 역정규화를 하는게 좋은지

  • 종속성 관리보다 데이터 접근성 요구, 성능 향상이 필요한 경우 주로 역정규화를 고려해볼 수 있음
  • 역정규화가 유리한 경우
    • 성능 향상: JOIN 연산이 많아 쿼리 성능이 저하될 때
    • 복잡한 쿼리 간소화: 자주 함께 사용되는 데이터를 결합하여 조회를 단순화할 때
    • 읽기 성능 최적화: 대량의 읽기 작업이 필요할 때
    • 보고서나 분석 작업: 빠른 조회가 필요한 데이터에 대해 미리 결합된 형태로 관리할 때

Reference