👀 규모 확장성(scalability)을 요구하는 시스템의 경우 거의 항상 정규화된 데이터베이스와 비정규화된 데이터베이스를 섞어 사용한다
중복을 최소화하도록 설계
-> 특정 조건을 만족하는 릴레이션의 스키마 형태
-> 제1정규형, 제2정규형, 제3정규형, BCNF형, 제4정규형, 제5정규형이 존재
-> 차수가 높아질수록 만족시켜야 할 제약조건이 늘어난다
읽는 시간을 최적화하도록 설계
-> 하나 이상의 테이블에 데이터를 중복해 배치하는 최적화 기법
비정규화는 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화원칙을 위배하는 행위이다. 어느 정도의 데이터 중복이나 그로 인해 발생하는 데이터 갱신 비용은 감수하는 대신 조인 횟수를 줄여 한층 효율적인 쿼리를 날릴 수 있도록 하겠단 것이다.
이상현상(Anomaly) : 중복된 정보로 인해 발생하는 문제
-삽입이상(Insertion Anomaly): 원하지 않는 자료가 삽입된다던지, 삽입하는데 자료가 부족해 삽입이 되지 않아 발생하는 문제점
-삭제이상(Deletion Anomaly): 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점
-갱신이상(Modification Anomaly): 정확하지 않거나 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는 문제점
-> 이상현상은 정규화를 통해 방지할 수 있다
데이터들이 어떤 기준값에 의해 종속되는 것을 의미
수강 릴레이션이 학번, 이름, 과목명으로 되어 있을 때, 학번이 결정되면 과목명과 관계없이 학번에는 항상 같은 이름이 대응된다. 학번에 따라 이름이 결정될 때 이름을 학번에 함수 종속적이라 한다.
수강 릴레이션이 학번, 과목명, 성적, 학년으로 되어있고 학번, 과목명이 기본키 일때
- 성적은 학번과 과목명의 같은 경우에 항상 같은 성적이 온다. 기본키의 일부인 학번만으로 같은 성적이 오지도, 일부인 과목명만으로 같은 성적이 오지도 않기 때문에 완전 함수적 종속이다.
- 학년은 과목명에 관계없이 학번이 같으면 같은 학년이 온다. 기본키의 일부인 학번만으로 학년이 결정되기 때문에 부분 함수적 종속이다.