IT/SQL

[SQLD] 정규화와 반정규화의 차이점 분석

정규화는 기본적으로 데이터 중복성을 제거해주기 떄문에 (쪼개주기 때문에) 성능 자체는 향상되는 특징을 가지고 있습니다. 




하지만 그만큼 조인이 많이 발생하기 때문에 그에 따른 성능저하가 나타나는 경우가 있을 수 있죠. 









위의 그림을 보시면 공급자번호, 전화번호, 메일주소, 위치 이 4가지가 이미 좌측 테이블에 있는데 이걸 정규화를 진행해서


오른쪽과 같이 쪼개게 되면 조인해야 하는 테이블이 늘어나면서 성능저하가 일어나게 됩니다.


하지만 좌측처럼 한가지 테이블안에서 어차피 조인이 가능하다면 굳이 정규화를 진행할 필요가 없겠죠.


혹은 정규화가 되어있더라 하더라도 성능을 고려하여 좌측과 같이 반정규화를 진행하는 것이 더 효율적일 수 있기 때문에 반정규화를 하게 됩니다.





하지만 무분별한 반정규화는 데이터 무결성을 깨뜨리는 역할을 하게 된다고합니다.


즉 성능의 이슈와 데이터 무결성의 보존 사이에서 정규화와 반정규화를 고려하게 되는것이죠.





반정규화 절차에 대해 간략하게 살펴보겠습니다.




언제 반정규화를 진행하는게 좋을까?



1. 자주 사용되는 테이블에 접근하는 프로세스의 수가 많고 항상 일정한 범위만을 조회하는 경우


2. 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우, 처리 범위를 줄이지 않으면 성능을 보장 할 수 없을 경우


3. 테이블에 지나친 조인이 걸려있을 경우



언제 반정규화를 안해도 될까?


1. 인덱스나 클러스터링을 통해 성능 향상을 유도할 수 있는 경우


 - 여기서 클러스터링이란 예를들면 여러대의 컴퓨터를 통해 같은 것을 실행할 수 있도록 하여 한군데서 실행이 되지 않더라도 다른 처리 장치가

   실행 할 수 있도록 하는 방법을 의미합니다.


2. 파티셔닝 기법을 통해 성능을 향상 시킬 수 있는 경우




반정규화의 기법


반정규화의 기법에는 테이블 반정규화, 칼럼 반정규화, 관계 반정규화 등이 있습니다.


복잡한 것 같지만 사실 위에서 말한 이야기들의 중복에 불과합니다.


여러 상황을 고려하여 각각의 상황에 맞게 반정규화를 실행한다는 뜻입니다.


반정규화를 적용할 때 데이터를 입력, 수정, 삭제 할 때는 성능이 떨어지는 점을 기억해야하고, 데이터의 무결성 유지에 주의를 해야합니다..




지금까지 정리한 내용은 개인 SQLD 자격증 시험 공부를 위해 정리한 내용입니다.


제 편의 위주로 정리된 부분이 있으니 어느정도 감안하여 정보를 취합하시기 바라며


언제든 수정사항 혹은 추가해야 할 사항이 있으시면 댓글로 남겨주시면 업데이트하도록 하겠습니다.