💡 정규화란 무엇이고 장점과 단점은 무엇이 있을까요?
정규화는 ERD 내에서 중복 요소를 찾아 제거해나가는 과정이다
정규화 방법 :
1) 1차. 2차 3차. 보이스코드 정규화는 함수적 종속성에 근거
2) 4차 정규화는 다치 종속을 제거
3) 5차 정규화는 조인에 의한 이상현상을 제거하여 정규화를 수행합니다.
👍장점 :
정규화를 통해 입출력 데이터의 양을 줄여 성능을 향상시킵니다. 입력/수정/삭제 시 성능은 항상 향상됩니다.
- 유연성 증가: High Cohesion & Loose Coupling 원칙에 충실해짐
- 재활용 가능성 증가: 개념이 세분화됨
- 데이터 중복 최소화
👎단점 :
정규화로 인해 조회 시 처리 조건에 따라 성능 저하가 발생할 수도 있습니다
- 데이터 조회 시 조인을 유발하여 CPU와 메모리를 많이 사용하게 됨
- 반정규화로 해결 가능
- 조인이 발생하더라도 인덱스를 사용하여 조인 연산을 수행하면 성능 상 단점이 거의 없고, 정규화를 통해 필요한 인덱스의 수를 줄일 수 있음
- 정규화를 통해 소량의 테이블이 생성된다면 성능 상 유리할 수 있음
+++
💡 정규화 과정 보다 자세히 :
- 1차 정규화: 속성의 원자성 확보, 다중값 속성을 분리함
- 2차 정규화: 부분 함수 종속성 제거, 일부 기본키에만 종속된 속성을 분리함, 기본키가 하나의 칼럼일 때 생략 가능
= 부분 함수 종속성 - 3차 정규화: 이행 함수 종속성 제거, 서로 종속관계가 있는 일반속성을 분리함, 주식별자와 관련성이 가장 낮음
= 이행 함수 종속성 - 보이스코드 정규화(BCNF; Boyce-Codd Normal Form): 후보키가 기본키 속성 중 일부에 함수적 종속일 때 다수의 주식별자를 분리함
- 4차 정규화: 다치 종속 분리
- 5차 정규화: 결합 종속 분리
+++
💡 High Cohesion & Loose Coupling
= 높은 응집도와 낮은 결합도 = 유연성
응집도(Cohesion) : 한 모듈 내에 존재하는 함수, 데이터 등의 구성 요소들 사이의 밀접한 정도
응집도가 가장 높은 모듈은 하나의 모듈이 단일 기능 하나만을 담당하며, 필요한 함수와 데이터가 뭉쳐 구성되어 있는 경우이다.
응집도는 정보 은닉과도 관계가 있으며, 응집도가 높은 모듈은 프로그램 전체에서 담당하는 기능을 수행하는 것에 있어서는 다른 모듈과의 상호작용이 거의 없이도 단일 기능을 수행할 수 있게된다.
결합도(Coupling) : 하나의 모듈이 다른 모듈에 의존하는 정도 = 의존도
프로그램 내에서 독립성이 높은 모듈(결합도가 낮은 모듈)은 서로의 기능에 영향을 미치지 않고 데이터만을 주고받는다.
때문에 전체 프로그램에서 일부 기능을 수정해야 할 때 그 기능을 담당하는 모듈만을 교체하면 되기 때문에 유지보수가 손쉽다
응집도는 높을수록 좋고 결합도는 낮을 수록 좋다는 "high cohesion loose coupling" 원칙이 항상 유효한 것은 아니다.
프로그램의 특성이나 상황에 따라 유연하게 적용한다
참고: https://www.leafcats.com/68
💡 반정규화란 무엇이고 절차를 설명해보세요.
반정규화(Denormalization)는 정규화의 반댓발로, 데이터 중복을 허용하여 조인을 줄이는 DB 성능 향상 방법이다.
데이터의 중복을 허용하여 데이터 무결성을 희생하는 대신 조회 성능 향상시킨다.
반정규화 절차 :
- 반정규화 대상 조사: 데이터 처리 범위 및 통계성 등 조사
- 다른 방법 검토: 1) 뷰 2) 클러스터링 3) 인덱스 4) 애플리케이션
- 반정규화 적용 : 정규화 수행 후 반정규화 수행
'CS > DB & SQL' 카테고리의 다른 글
[기술면접] DB | Nested Loop, Sort-Merge, Hash Join (0) | 2023.09.07 |
---|---|
[기술면접] DB 문답 | index 상세 (0) | 2023.09.05 |
[기술면접] DB 문답 | Transaction의 Lock, Index (0) | 2023.09.04 |
[기술면접] DB 문답 | Transaction + SQL언어 (0) | 2023.09.01 |
[기술면접] DB문답 | SQL JOIN, RDB vs NoSQL (0) | 2023.08.29 |