ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS] DB - 정규화
    CS 2023. 10. 19. 12:14
    728x90

    정규화란?

    이상현상이 있는 릴레이션을 분해해서 이상현상을 없애는 과정이다.

    결국에는 데이터들의 무결성을 향상 시키고 중복을 제거하기 위해서 사용한다.

     

    데이터 무결성은 데이터베이스에 저장된 데이터의 정확성, 일관성, 유효성을 지키는 것
    이상현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류.

     

    정규화의 장,단점

    - [ 장점 ] : DB 변경시 이상 현상 제거 가능 

    - [ 장점 ] : 정규화된 DB 구조에서 새로운 데이터 형 추가해도 구조를 변경하지 않아도 되거나 일부만 변경해도 된다

    - [ 단점 ] : JOIN연산이 많아질 수 있다 -> 데이터 처리 속도 느려질 수 있다 -> 성능 저하가 발생하면 반정규화를 적용할 수 있다

     

    전제적인 정규화 흐름

    정규화의 흐름

     

    제 1 정규화 (1NF)

    테이블 컬럼을 "원자값(하나의값)"을 갖도록 테이블을 분해하는 것이다.

    1. 각 컬럼이 하나의 속성만을 가져야한다.
    2. 하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야한다.
    3. 각 컬럼이 유일한 이름을 가져야한다.
    4. 칼럼의 순서가 상관없어야한다.

    1정규화

     

    제 2 정규화 (2NF)

    제1 정규화가 진행된 테이블에 "완전 함수 종속"을 만족하도록 테이블을 분해하는 것이다.

    완전 함수 종속 - 기본키의 부분집합이 결정자가 되면 안된다!

     

    결정자 -> 테이블의 한 필드값(A = 결정자)가 다른 필드(B = 종속자)값을 결정하는 관계 : A에 의해 B의 값이 결정된다

    2정규화

     

    제 3 정규화 (3NF)

    제 2정규화가 진행된 테이블에 이행적 종속을 없애도록 테이블을 분해하는 것이다.

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

    -> 기본키를 제외한 속성들 간의 이행적 종속이 없어야 한다

    3 정규화

    기본키인 우편번호에 2개의 테이블이 의존함을 알 수 있다. ( 기본키에 의존하게 해야 한다 )

     

    BCNF

    제 3정규화가 진행된 테이블에 모든 결정자가 후보키 집합에 속한 정규형이다.

     

    후보키, 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합이다. -> 기본키가 될 수 있는 후보들이며, 유일성과 최소성을 만족해야 한다. [ 유일성 : 하나의 특정 행을 바로 찾을 수 있는 고유한 데이터 속성 ]
    슈퍼키, 유일성만 만족하면 된다
    대체키, 후보키중 기본키가 아닌 키들

    분해전

     

    분해후

     

    'CS' 카테고리의 다른 글

    [CS] - CORS  (0) 2023.10.18
    [CS] OAuth2.0 간단한 이해  (0) 2023.03.10
    [CS] batch Insert  (0) 2023.01.09
    [CS] 동적 프록시  (0) 2023.01.07
    [CS] 직렬화  (0) 2023.01.07
Designed by Tistory.