먼지 쌓인 키보드
SQLD 요약정리 및 문제 (4회차) 본문
반응형
(해당 글은 GPT-4o로 작성되어 사용시 참고바랍니다.)
4회차: 정규화(Normalization)와 반정규화(Denormalization)
이번 회차에서는 데이터베이스 설계의 중요한 과정인 **정규화(Normalization)**와 **반정규화(Denormalization)**에 대해 학습합니다. 정규화는 데이터를 중복 없이 효율적으로 관리하는 방법이며, 반정규화는 성능 최적화를 위해 필요할 때 사용합니다.
1. 정규화(Normalization)
정규화는 데이터베이스의 중복을 줄이고 무결성을 유지하기 위해 테이블을 구조화하는 과정입니다. 각 단계마다 특정 규칙을 만족함으로써 데이터의 불필요한 중복을 최소화합니다.
1.1 제1정규형(1NF)
- 조건:
- 예시: "전화번호" 컬럼에 여러 전화번호가 한 셀에 있는 경우 1NF를 위반한 것입니다. 이를 여러 행으로 나누어 원자값(Atomic Value)으로 만들어야 합니다.
1.2 제2정규형(2NF)
- 조건:기본키의 부분 집합에만 종속된 속성이 없어야 합니다. 즉, 모든 비기본키 속성이 기본키 전체에 의존해야 합니다.
- 예시:
1.3 제3정규형(3NF)
- 조건:비기본키 속성 간의 종속성이 없어야 합니다. 기본키가 아닌 속성이 다른 비기본키에 종속되어 있으면 안 됩니다.
- 예시:부서ID가 부서명에부서 테이블로 분리해야 합니다.
2. 반정규화(Denormalization)
반정규화는 정규화된 데이터베이스를 성능 향상을 위해 의도적으로 중복을 허용하거나 테이블을 합치는 과정을 의미합니다. 데이터 중복이 허용되지만, 조회 속도가 향상될 수 있습니다.
2.1 반정규화의 필요성
- 성능 최적화: 정규화된 데이터베이스는 조인이 많아져 성능이 떨어질 수 있습니다. 이를 해결하기 위해 반정규화가 필요합니다.
- 데이터 중복: 데이터를 중복 저장하여 조회 성능을 개선할 수 있습니다.
2.2 반정규화 예시
- 조인 감소: 자주 조인되는 테이블을 합쳐 성능을 향상시킬 수 있습니다.
- 중복 데이터 저장: 자주 참조되는 데이터를 여러 테이블에 중복 저장하여 조회 시간을 단축할 수 있습니다.
과제
- 정규화 실습:
- 아래 테이블이 제1정규형(1NF)을 위반하고 있습니다. 이를 수정해보세요.
가격 인하고객ID | 고객이름 | 고객주소 | 전화번호
------------------------------------------------
101 | 홍길동 | 서울시 강남구 | 010-1234-5678, 02-3456-7890
102 | 이몽룡 | 서울시 서초구 | 010-9876-5432 - 반정규화 적용 실습:
- 아래의 직원(Employee) 테이블과 부서(Department) 테이블이 자주 조인된다고 가정했을 때, 반정규화를 적용해 성능을 최적화하는 방법을 제안해보세요.
가격 인하
직원(Employee) 테이블: 직원ID | 직원이름 | 부서ID -------------------------- 201 | 홍길동 | 1 202 | 이몽룡 | 2 |
부서(Department) 테이블: 부서ID | 부서명 --------------- 1 | 개발팀 2 | 마케팅팀 |
과제 답 및 해설
1. 정규화 실습
- 문제 해결:
- 1NF를 위반한 이유는 전화번호 칼럼에 여러 전화번호가 하나의 셀에 들어있기 때문입니다. 이를 수정하려면 각 전화번호를 별도의 행으로 분리해야 합니다.
가격 인하고객ID | 고객이름 | 고객주소 | 전화번호
-------------------------------------------
101 | 홍길동 | 서울시 강남구 | 010-1234-5678
101 | 홍길동 | 서울시 강남구 | 02-3456-7890
102 | 이몽룡 | 서울시 서초구 | 010-9876-5432 - 해설: 각 고객의 전화번호를 한 셀에 여러 개 입력하는 것은 1NF를 위반하는 것입니다. 따라서 이를 각각의 행으로 나누어 원자값을 유지해야 합니다.
2. 반정규화 적용 실습
- 문제 해결:
- 직원(Employee) 테이블과 부서(Department) 테이블을 자주 조인해야 한다면, 반정규화를 통해 부서명을 직원(Employee) 테이블에 추가할 수 있습니다.
가격 인하직원(Employee) 테이블:
직원ID | 직원이름 | 부서ID | 부서명
----------------------------------
201 | 홍길동 | 1 | 개발팀
202 | 이몽룡 | 2 | 마케팅팀 - 해설: 반정규화를 통해 자주 조인되는 두 테이블을 결합함으로써 성능을 향상시킬 수 있습니다. 다만, 부서명이 변경될 경우 모든 직원 레코드에서 수정해야 한다는 단점이 있습니다.
이렇게 4회차 학습 내용과 과제에 대한 답과 해설을 제공했습니다.
4회차 테스트 문제
문제
- 정규화(Normalization)에 대한 설명으로 옳은 것은 무엇인가?
- A) 정규화는 성능을 최적화하기 위해 테이블을 결합하는 과정이다.
- B) 정규화는 데이터를 중복하여 저장해 검색 속도를 높이기 위한 과정이다.
- C) 정규화는 데이터를 중복 없이 구조화하여 데이터 무결성을 유지하기 위한 과정이다.
- D) 정규화는 주로 OLAP 시스템에서 사용하는 기법이다.
- 제2정규형(2NF)의 조건으로 올바른 것은?
- A) 모든 속성이 기본키에 종속되지 않아야 한다.
- B) 기본키의 일부 속성에만 종속된 속성이 없어야 한다.
- C) 기본키가 아닌 속성이 이행적 종속 관계에 있어야 한다.
- D) 한 테이블에 중복된 데이터가 있어도 무방하다.
- 다음 테이블에서 제1정규형(1NF)을 위반한 부분은 무엇인가?
markdown
고객ID | 고객이름 | 전화번호
---------------------------
101 | 홍길동 | 010-1234-5678, 02-3456-7890
102 | 이몽룡 | 010-9876-5432- A) 고객이름에 중복이 발생했다.
- B) 전화번호 칼럼에 여러 개의 값이 입력되었다.
- C) 고객ID가 고유하지 않다.
- D) 전화번호에 NULL 값이 허용되었다.
- 반정규화(Denormalization)에 대한 설명으로 옳은 것은 무엇인가?
- A) 반정규화는 데이터 무결성을 높이는 과정이다.
- B) 반정규화는 데이터를 중복 저장함으로써 성능을 향상시키기 위한 방법이다.
- C) 반정규화는 항상 데이터베이스 성능을 저하시킨다.
- D) 반정규화는 데이터베이스에서 발생하는 문제를 해결하기 위해 사용되지 않는다.
- 반정규화를 적용해야 하는 경우로 적절한 것은?
- A) 데이터베이스에 조인이 너무 많아 조회 성능이 저하되는 경우
- B) 데이터 중복을 제거하여 무결성을 높여야 하는 경우
- C) 테이블에 새로운 속성을 추가해야 하는 경우
- D) 모든 데이터를 한 테이블로 합쳐야 하는 경우
해설 및 답안
- [정답: C]
- 해설: 정규화는 데이터베이스에서 데이터를 중복 없이 저장하고 무결성을 유지하기 위한 방법입니다. 테이블 결합은 반정규화에 해당하며, 정규화는 OLTP 시스템에서 주로 사용됩니다.
- [정답: B]
- 해설: 제2정규형에서는 기본키의 일부에만 종속된 속성들이 없어야 하며, 모든 속성은 기본키 전체에 종속되어야 합니다. A와 D는 틀린 설명입니다.
- [정답: B]
- 해설: 전화번호 칼럼에 여러 개의 값이 한 셀에 들어가 있는 것은 1NF 위반입니다. 각 필드는 하나의 원자값만 가져야 합니다.
- [정답: B]
- 해설: 반정규화는 데이터를 중복 저장하여 성능을 향상시키는 과정입니다. 반정규화는 데이터 무결성보다는 성능 최적화에 중점을 둡니다.
- [정답: A]
- 해설: 조인이 많은 경우 반정규화를 통해 성능을 개선할 수 있습니다. B는 정규화가 필요한 상황이고, C와 D는 반정규화와 관련이 없습니다.
반응형
'공부 관련 > SQLD 공부(feat.GPT)' 카테고리의 다른 글
SQLD 요약정리 및 문제 (5회차) (1) | 2024.09.13 |
---|---|
SQLD 요약정리 및 문제 (3회차) (0) | 2024.09.01 |
SQLD 요약정리 및 문제 (1~2회차) (2) | 2024.08.30 |
SQLD 공부 계획 (GPT로 시작해보기) (0) | 2024.08.30 |
Comments