[데이터베이스] 정규화

CHOI YUN HO·2022년 3월 10일
2

데이터베이스

목록 보기
3/3

정규화

데이터베이스를 설계할 때 중복을 최소화하기 위한 것

즉 하나의 릴레이션에 하나의 의미만 존재하도록 릴레이션을 분해해서, 데이터의 일관성을 지키고 데이터 중복을 최소화하기 위한 것이다.

근데 왜 그렇게 해야할까??

이상 현상

정규화를 적절히 하지 않는다면, 릴레이션에 데이터가 중복되고 그 릴레이션에 어떤 작업을 할 때 이상한 현상이 발생할 수 있다.

종류설명
삽입이상데이터를 저장할 때, 불필요한 데이터나 의도하지 않은 데이터까지 삽입해야 하는 경우
삭제이상데이터를 삭제할 때, 원하지 않는 데이터도 같이 삭제되는 경우
갱신이상중복된 데이터 중에서 특정 부분만 수정되어 전체적으로 모순이 생기는 경우

정규화의 장단점

그렇다면 위와 같은 이상 현상을 해결하는 방법인 정규화는 항상 좋을까??

장점

  1. 이상현상이 발생하는 문제를 해결할 수 있다.
  2. 데이티베이스 규모 변경 및 확장 시 기존의 데이터베이스의 변경을 최소화한다.

단점

릴레이션의 분해로 인해 JOIN연산이 많아진다. 이로인해 쿼리가 느려질 수 있다.

정규화를 수행한다는 것은 이상현상을 제거하는 것이다. 데이터의 중복을 제거하고 결정자에 의해 동일한 의미와 일반 속성이 하나의 테이블로 집약되므로, 한 테이블의 데이터 용량이 최소화되는 효과가 있다. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 느려질 수도 있다.

이런 측면에서 쿼리의 속도에 대해 나중에 다시 고민해보고 정리해야겠다.

단계별 정규화

단계조건
1정규형(1NF)테이블 내의 속성값들이 원자값으로 구성
2정규형(2NF)부분함수 종속 제거
3정규형(3NF)이행함수 종속 제거
보이스-코드 정규형(BCNF)결정자 함수이면서 후보키가 아닌 것 제거
4정규형(4NF)다치 종속 제거
5정규형(5NF)조인 종속 제거

역정규화

정규화가 무엇인지, 왜 필요한지, 장단점, 종류까지 알아봤다.

하지만 위에서 언급한 바와 같이 정규화를 통해 릴레이션이 분해되면 JOIN연산이 많아지면서 성능이 저하될 우려가 있다.

그래서 경우에 따라 성능 이슈가 있는(읽기작업이 많이 필요한) 데이터베이스의 성능을 향상시키기 위해 역정규화를 한다.

이에 대해서는 나중에 따로 자세히 다뤄봐도 재밌을 것 같다.

profile
가재같은 사람

0개의 댓글