위키득계정 ↗
기술

데이터베이스 정규화

데이터베이스 정규화기술
영문명
Database normalization
적용 대상
관계형 데이터 설계
핵심 개념
키와 함수적 종속
주요 목적
삽입, 수정, 삭제 과정의 이상 감소
데이터베이스 정규화는 관계형 데이터의 종속 관계를 분석해 테이블 구조를 정리하는 과정이다. 같은 사실을 여러 곳에 반복해서 저장할 때 생기는 갱신 오류를 줄이고 데이터의 의미를 명확하게 하는 데 목적이 있다.

같은 사실을 여러 번 적을 때

동아리의 모든 행사 행에 동아리 연락처를 반복해서 넣으면 연락처가 바뀔 때 여러 행을 고쳐야 한다. 일부만 수정되면 같은 동아리에 서로 다른 연락처가 남는다. 행사와 동아리의 정보를 나누고 식별자로 연결하면 이 중복을 줄일 수 있다.

나누기만 하면 좋은 설계가 되는 것은 아니다. 어떤 항목이 무엇을 결정하는지 먼저 살펴야 한다. 동아리 번호로 동아리 이름과 현재 연락처가 결정된다면 이 관계가 구조를 정하는 근거가 된다.

키와 종속 관계

함수적 종속은 어떤 속성 집합의 값이 같으면 다른 속성의 값도 하나로 정해지는 관계를 뜻한다. 후보 키는 각 행을 구분할 수 있는 최소한의 속성 집합이다. 정규형은 이런 관계가 어떤 조건을 만족하는지 구분한다.

제1정규형, 제2정규형, 제3정규형과 보이스-코드 정규형 등이 알려져 있다. 단계가 올라갈수록 무조건 실무 성능이 좋아진다는 뜻은 아니다. 특히 복합 키의 일부에만 의존하는 값이나 키가 아닌 항목을 거쳐 결정되는 값을 구분하는 것이 기본적인 설계 검토에 도움이 된다.

분해 뒤에도 의미가 보존되어야 한다

테이블을 나눈 뒤 다시 연결했을 때 원래의 관계를 올바르게 복원할 수 있어야 한다. 잘못 분해하면 없던 조합이 생기거나 필요한 사실을 잃을 수 있다. 제약 조건을 어디에서 검사할 수 있는지도 함께 살펴야 한다.

겉보기의 중복이 같은 사실의 반복인지는 맥락에 달려 있다. 주문 당시의 배송지는 고객의 현재 주소와 다른 사실이다. 과거 배송지를 무조건 현재 주소로 연결하면 이력의 의미를 잃는다.

정규화와 조회 비용

구조를 나누면 조회에 조인이 필요할 수 있다. 반대로 중복을 줄여 변경을 단순하게 만들기도 한다. 실제 성능은 데이터 양, 인덱스, 조회 패턴과 실행 계획을 보고 판단해야 한다. 필요한 경우 비정규화를 선택할 수 있지만, 중복 값이 어긋나지 않게 유지할 책임도 함께 생긴다.

관련 문서

관계형 데이터베이스 / 데이터 모델 / SQL / 데이터베이스 트랜잭션