[SQLD] 정규화 & 그 문제점
#1 BCNF
: Boyce-Codd Normal From
: 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며 서로 중첩되어야 함
: 제3정규화보다 좀 더 강하게 제약조건을 거는 것 (제3정규화 <= BCNF)
#2 정규화 추가설명
✴︎ 제1정규화
: 속성을 보고 한개의 속성으로 유일성을 만족할 수 있는지 확인
: 식별자를 찾는 과정
✴︎제2정규화
: 기본키가 두개 이상인 경우 대상
: 모든 속성이 식별자에 종속해야 하며, 그렇지 않은 경우 분해
: 제1정규화와 마찬가지로 중복 확인
#3 정규화의 문제점
정규화 : 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높힘
→ 하지만, 데이터 조회(SELECT)시 조인(JOIN)을 유발하기 때문에 CPU와 메모리를 많이 사용함
#4 옵티마이저 Optimizer
: 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진
: 컴퓨터의 두뇌 = CPU / DBMS의 두뇌 = OPTIMIZER
#5. 인덱스 Index
: TABLE의 컬럼을 색인화(따로 파일로 저장)하여 검색 시 해당 TABLE의 레코드를 Full Scan하는 것이 아닌, 색인화 되어있는 INDEX 파일을 검색하여 검색 속도를 빠르게 함
#6 반정규화
: 조인이 부하를 유발하는 것은 분명
: 반정규화를 하여 하나의 테이블에 저장한다면 조인을 통한 성능 저하는 해결 → 성능 저하 해결을 위해 반정규화가 존재
: 시스템의 성능을 향상 시키는 통합 프로세스
: 정규화와 반정규화를 바꾸면 안되고 섞어서 사용해야함
: 원자성, 데이터 무결성을 보장할 수 없지만 성능 향상을 위해 의도적으로 중복을 만듬
#7 정규화를 사용한 성능 튜닝 → 성능 최적화
: 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 발생
: 반정규화를 하여 한 행을 읽기 위해 여러개의 블록을 읽게 되면 디스크 입•출력이 증가 → 성능이 저하
: 정규화는 입출력 데이터의 양을 줄여서 성능을 향상 시킬 수 있음