먼지 쌓인 키보드

SQLD 요약정리 및 문제 (4회차) 본문

공부 관련/SQLD 공부(feat.GPT)

SQLD 요약정리 및 문제 (4회차)

Under_Desk 2024. 9. 7. 00:55
반응형

(해당 글은  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. 정규화 실습:
    • 아래 테이블이 제1정규형(1NF)을 위반하고 있습니다. 이를 수정해보세요.
    가격 인하
    고객ID | 고객이름 | 고객주소   | 전화번호
    ------------------------------------------------
    101     | 홍길동   | 서울시 강남구 | 010-1234-5678, 02-3456-7890
    102     | 이몽룡   | 서울시 서초구 | 010-9876-5432

     

     
     
  2. 반정규화 적용 실습:
    • 아래의 직원(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회차 테스트 문제

문제

  1. 정규화(Normalization)에 대한 설명으로 옳은 것은 무엇인가?
    • A) 정규화는 성능을 최적화하기 위해 테이블을 결합하는 과정이다.
    • B) 정규화는 데이터를 중복하여 저장해 검색 속도를 높이기 위한 과정이다.
    • C) 정규화는 데이터를 중복 없이 구조화하여 데이터 무결성을 유지하기 위한 과정이다.
    • D) 정규화는 주로 OLAP 시스템에서 사용하는 기법이다.
  2. 제2정규형(2NF)의 조건으로 올바른 것은?
    • A) 모든 속성이 기본키에 종속되지 않아야 한다.
    • B) 기본키의 일부 속성에만 종속된 속성이 없어야 한다.
    • C) 기본키가 아닌 속성이 이행적 종속 관계에 있어야 한다.
    • D) 한 테이블에 중복된 데이터가 있어도 무방하다.
  3. 다음 테이블에서 제1정규형(1NF)을 위반한 부분은 무엇인가?
    markdown
    고객ID | 고객이름 | 전화번호
    ---------------------------
    101    | 홍길동   | 010-1234-5678, 02-3456-7890
    102    | 이몽룡   | 010-9876-5432
    • A) 고객이름에 중복이 발생했다.
    • B) 전화번호 칼럼에 여러 개의 값이 입력되었다.
    • C) 고객ID가 고유하지 않다.
    • D) 전화번호에 NULL 값이 허용되었다.
  4. 반정규화(Denormalization)에 대한 설명으로 옳은 것은 무엇인가?
    • A) 반정규화는 데이터 무결성을 높이는 과정이다.
    • B) 반정규화는 데이터를 중복 저장함으로써 성능을 향상시키기 위한 방법이다.
    • C) 반정규화는 항상 데이터베이스 성능을 저하시킨다.
    • D) 반정규화는 데이터베이스에서 발생하는 문제를 해결하기 위해 사용되지 않는다.
  5. 반정규화를 적용해야 하는 경우로 적절한 것은?
    • A) 데이터베이스에 조인이 너무 많아 조회 성능이 저하되는 경우
    • B) 데이터 중복을 제거하여 무결성을 높여야 하는 경우
    • C) 테이블에 새로운 속성을 추가해야 하는 경우
    • D) 모든 데이터를 한 테이블로 합쳐야 하는 경우

 


해설 및 답안

  1. [정답: C]
    • 해설: 정규화는 데이터베이스에서 데이터를 중복 없이 저장하고 무결성을 유지하기 위한 방법입니다. 테이블 결합은 반정규화에 해당하며, 정규화는 OLTP 시스템에서 주로 사용됩니다.
  2. [정답: B]
    • 해설: 제2정규형에서는 기본키의 일부에만 종속된 속성들이 없어야 하며, 모든 속성은 기본키 전체에 종속되어야 합니다. A와 D는 틀린 설명입니다.
  3. [정답: B]
    • 해설: 전화번호 칼럼에 여러 개의 값이 한 셀에 들어가 있는 것은 1NF 위반입니다. 각 필드는 하나의 원자값만 가져야 합니다.
  4. [정답: B]
    • 해설: 반정규화는 데이터를 중복 저장하여 성능을 향상시키는 과정입니다. 반정규화는 데이터 무결성보다는 성능 최적화에 중점을 둡니다.
  5. [정답: A]
    • 해설: 조인이 많은 경우 반정규화를 통해 성능을 개선할 수 있습니다. B는 정규화가 필요한 상황이고, C와 D는 반정규화와 관련이 없습니다.

 

 

반응형
Comments