비효율적으로 설계된 데이터베이스 구조로 인해 데이터의 삽입(Insert), 삭제(Delete), 갱신(Update), 작업 중에 일관성 문제나 데이터 무결성 위반이 발생하는 현상.
삽입 이상

삭제 이상



삭제이상(Delete Anomaly)
1102 학생이 'A01' 수강한 기록을 삭제할 떄
삽입이상(Insert Anomaly)
(1104, 유관순, 010-4444-5555)인 학생을 추가하고자 할 때
갱신 이상(Update Anomaly)
'1101'학생의 연락처가 변경된 이유

이상현상을 방지하기 위해 데이터베이스를 정규화(Normalization)하여 데이터 중복을 줄이고, 테이블 간 관계를 잘 설계하는 것이 중요함
관계형 데이터베이스 설계 과정에서 데이터 중복을 최소화하고 데이터 무결성을 유지하기 위해 데이터를 구조화하는 체계적인 방법론
삽입, 삭제, 갱신 이상현상(Anomalies)을 예방함
데이터의 일관성과 정확성을 유지함
논리적이고 명확한 테이블 구조를 통해 데이터 관리와 변경 용이함
도메인들의 값이 원자값으로 구성되도록 함


제1정규형을 만족하면서, 부분 함수 종속을 제거함.
부분 함수 종속은 관계형 데이터베이스에서 한 속성이 기본키의 일부에만 종속되는 상태





제2정규형을 만족하면서, 이행적 함수 종속을 제거함



제3정규형을 만족하면서, 모든 결정자가
후보키가 되도록 함
다치 종속을 제거함
조인 종속을 제거하여 테이블 간의 데이터 관계를 분리함
정규화를 통해 일반적으로 성능이 향상되나, 조회의 경우 처리 조건에 따라 성능이 향상되거나 저하되는 경우가 있을 수 있음


특정 학생의 학년 변경 시
특정 학년 학생의 학번, 이름 조회 시
학번, 이름, 과목명, 평점 조회 시
역정규화 = Denormalization
정규화된 엔터티, 속성, 관계에 대해 성능 향상을 목적으로 중복, 통합, 분리를 수행하는 데이터 모델링 기법
비정규화: 정규화를 아예 수행하지 않음
테이블, 칼럼, 관계의 반정규화를 종합적으로 고려해야 함. 일반적으로 속성(칼럼)의 중복을 시도함.
과도한 반정규화는 데이터 무결성을 침해하게됨.

한 테이블에서 이미 존재하는 데이터를 다른 테이블에 중복으로 저장하기 위해 칼럼을 추가하는 방식
목적
JOIN 연산을 최소화하여 조회 성능을 향상.
특정 테이블만으로 데이터를 빠르게 조회 가능.
예시
주문 테이블에 회원의 이름이나 주소를 중복 저장

계산 비용을 줄여 성능 최적화 ->
조회 시마다 계산하지 않고 미리 계산된 값을 활용함






슈퍼타입(Supertype)과 서브타입(Subtype) 관계로 설게된 테이블을 하나의 테이블로 통합하는 반정규화 기법
슈퍼타입(Supertype)
공통 속성을 가진 상위 개체
서브타입(Subtype)
슈퍼타입을 기반으로 추가 속성을 가지는 하위 개체

테이블 수직 분할과 수평 분할은 데이터베이스에서 테이블을 분할하여 성능 최적화, 관리 효율성 증대, 또는 데이터 분산을 목적으로 사용하는 기법
테이블 수직 분할
자주 사용되는 속성만 포함한 테이블을 만들어 조회 성능을 향상

테이블 수평 분할
데이터를 특정 기준(지역, 날짜)으로 나누어서 여러 테이블에 저장하여 각 테이블의 데이터 양을 줄이는 방식

중복 테이블 추가
조회 빈도가 높은 데이터를 관리하기 위해 별도의 테이블로 복제하는 기법

통계 테이블 추가
대규모 데이터에 대해 미리 계산된 요약 정보를 저장하는 테이블을 생성

이력 테이블 추가
이력 테이블 추가는 데이터 변경 내역이나 시간, 경과에 따른 데이터 상태를 저장하는 별도 테이블으 생성하는 기법

부분 테이블 추가
하나의 테이블에서 집중적으로 이용되는 칼럼들만을 추출하여 별도의 테이블 생성.
테이블 수직 분할과 유사하지만, 원본 테이블을 유지하면서 추가함.
중복 관계 추가는 테이블 간의 기존 관계를 단축하기 위해새로운 관계를 추가함.
데이터 조회 시 여러 테이블을 조인해야 하는 상황에서. 중간 단계를 생략하고 필요한 데이터를 직접 연결하여 조회 성능을 개선함.