위클리 페이퍼는 현재 훈련받고 있는 코드잇 스프린트 데이터 애널리스트 트랙에서 매주마다 훈련생 스스로 프로그래밍 언어, 데이터분석, 통계, 머신러닝 등 특정 주제에 대하여 심화 학습을 할 수 있도록 제출하는 과제입니다.
(매주 2~3가지 주제를 스스로 알아보고 학습하여 관련된 내용을 정리하여 후에 취업 활동 간에 경험할 수 있는 기술 면접을 대비함.)
22주차에 이어 이번 23주차 위클리 페이퍼의 내용을 소개하겠습니다.
이번 14번째 위클리 페이퍼 주제는
1. 데이터베이스 정규화란 무엇인가요? 또, 정규화의 장단점은 무엇인가요?
2. 논리적 모델링에서 사용되는 주요 구성 요소인 엔터티, 속성, 관계에 대해 예시를 들어 설명해주세요.
1. 데이터베이스 정규화란 무엇인가요? 또, 정규화의 장단점은 무엇인가요?
데이터베이스 정규화란?
데이터베이스 정규화는 데이터를 중복 없이 체계적으로 관리하기 위한 설계 과정입니다. 데이터가 중복되면 저장 공간을 낭비할 뿐만 아니라 데이터 간 불일치(Inconsistency)가 발생할 가능성이 높아집니다.
예를 들어, 같은 고객 정보가 여러 테이블에 저장되어 있고, 한 테이블에서 정보가 수정되었지만 다른 테이블에서는 수정되지 않았다면 데이터의 신뢰도가 떨어집니다.
이런 문제를 해결하기 위해 데이터를 논리적이고 일관되게 분할하고, 테이블 간 관계를 정의하여 효율적으로 관리합니다.
정규화는 단순히 "중복 제거"에만 그치지 않습니다.
- 데이터의 구조적 안정성을 보장하고,
- 삽입, 삭제, 수정 시 발생할 수 있는 이상현상(Anomaly)을 방지하며,
- 향후 데이터 확장이나 변경에도 유연하게 대처할 수 있도록 데이터베이스를 설계하는 데 초점을 맞춥니다.
정규화의 중요성
1. 중복 데이터로 인한 비효율성
중복된 데이터는 저장 공간을 낭비할 뿐 아니라, 데이터 수정 시 여러 테이블을 동시에 업데이트해야 하는 부담을 줍니다.
예를 들어, 한 고객이 여러 구매 내역을 가진 경우, 고객 정보를 중복 저장하면 한 번의 정보 변경으로 여러 테이블을 수정해야 하는 비효율성이 생깁니다.
2. 삽입 이상(Insertion Anomaly)
새로운 데이터를 추가하려 할 때, 불필요한 값도 함께 입력해야 하는 경우가 있습니다.
예: 직원 정보를 저장하려고 하는데, 해당 직원이 아직 프로젝트에 배정되지 않았다면, 프로젝트 정보 필드는 빈 값으로 두어야 합니다. 이는 데이터 무결성을 해칠 가능성이 있습니다.
3. 삭제 이상(Deletion Anomaly)
특정 데이터를 삭제했을 때, 의도치 않게 중요한 데이터도 함께 삭제되는 문제입니다.
예: 한 프로젝트가 종료되어 삭제되면, 그 프로젝트에 참여한 직원의 정보까지 삭제되는 경우.
4. 갱신 이상(Update Anomaly)
중복 데이터로 인해 하나의 값을 변경할 때 모든 중복된 데이터를 일관되게 업데이트해야 하는 문제입니다.
예: 고객 주소가 여러 테이블에 저장되어 있다면, 고객 주소가 변경될 때 모든 테이블을 수정하지 않으면 불일치가 발생할 수 있습니다.
정규형의 단계
1. 제1정규형 (1NF)
모든 데이터가 원자값(Atomic Value)으로 나누어져야 합니다.
- 테이블의 각 컬럼은 더 이상 나눌 수 없는 값만 포함해야 합니다.
2. 제2정규형 (2NF)
제1정규형을 만족하면서, 부분 종속성(Partial Dependency)을 제거합니다.
- 기본키 일부에만 종속된 컬럼이 없어야 합니다.
3. 제3정규형 (3NF)
제2정규형을 만족하면서, 이행적 종속성(Transitive Dependency)을 제거합니다.
- 기본키가 아닌 속성 간의 종속 관계를 없앱니다.
4. BCNF (Boyce-Codd Normal Form)
제3정규형을 강화한 형태로, 모든 결정자(Determinant)가 후보키여야 합니다.
정규화의 장점
- 데이터 무결성 보장
- 데이터를 중복 없이 관리하므로 잘못된 정보가 입력될 가능성이 줄어듭니다.
- 예: 고객 이메일 주소를 한 곳에서만 관리하면 이메일이 변경될 때 실수를 방지할 수 있음.
- 확장성 향상
- 새로운 속성이나 데이터를 추가할 때 기존 데이터를 수정할 필요가 적습니다.
- 예: 주문 시스템에 새 결제 방식을 추가해도 기존 테이블에 영향을 주지 않음.
- 저장 공간 효율화
- 중복 데이터를 제거해 저장 공간을 절약할 수 있습니다.
정규화의 단점
- 성능 저하
- 정규화로 인해 테이블이 분리되면서 조인(Join) 연산이 많아져 성능이 저하될 수 있음.
- 예: 조회할 때 여러 테이블에서 데이터를 가져와야 하므로 복잡성이 증가.
- 설계 복잡성 증가
- 설계와 관리가 어려워지고, 잘못 설계할 경우 정규화 효과를 제대로 누리지 못할 수 있음.
- 실시간 시스템에서의 부담
- 실시간 데이터 처리 시스템에서는 정규화된 데이터베이스가 비효율적일 수 있습니다.
정규화와 비정규화의 균형
정규화는 데이터베이스의 무결성과 일관성을 유지하지만, 실무에서는 성능을 위해 비정규화(De-Normalization)를 선택하는 경우가 많습니다.
비정규화의 적용 사례
- 조회 성능 개선: 데이터 분석이나 리포트 생성 등, 조회가 빈번한 경우 일부 데이터를 중복 저장해 조회 속도를 높임.
- 캐싱: 자주 조회되는 데이터를 정규화하지 않고 별도로 저장해 성능 최적화.
정규화와 비정규화의 적절한 균형
- 정규화는 데이터의 정확성과 유연성을 보장하고,
- 비정규화는 실제 운영 환경에서의 속도와 편의성을 제공합니다.
둘 사이의 적절한 균형은 프로젝트 요구사항과 데이터 사용 패턴에 따라 달라질 수 있습니다.
2. 논리적 모델링에서 사용되는 주요 구성 요소인 엔터티, 속성, 관계에 대해 예시를 들어 설명해주세요.
논리적 모델링은 데이터베이스 설계 과정에서 데이터의 구조를 체계적으로 정의하는 중요한 단계입니다.
이 단계는 데이터의 추상화된 표현을 통해 실제 물리적 데이터베이스 설계로 이어지도록 합니다.
논리적 모델링의 주요 구성 요소인 엔터티, 속성, 관계를 개념과 예시를 들어 자세히 설명하겠습니다.
엔터티(Entity)
- 정의: 데이터베이스에서 관리하고자 하는 실체(객체)로, 저장해야 할 데이터의 대상입니다.
- 유형:
- 기본 엔터티(Base Entity): 독립적으로 존재하며 주요 데이터를 저장. (예: 고객, 제품)
- 종속 엔터티(Dependent Entity): 다른 엔터티에 의존해 존재. (예: 주문 품목)
- 교차 엔터티(Cross Entity): 다대다 관계를 해소하기 위해 사용. (예: 주문 상세)
- 시점 엔터티(Temporal Entity): 시간 정보를 저장하거나 이력 관리를 위해 사용. (예: 재고 기록)
- 집계 엔터티(Aggregation Entity): 집계 데이터나 요약 정보를 저장. (예: 월별 매출 기록)
예시
- 고객(Customer)
- 고객 정보를 저장하는 엔터티.
- 속성: 고객 ID(Customer_ID), 이름(Name), 이메일(Email), 전화번호(Phone Number).
- 설명: 쇼핑몰 회원인 "홍길동"이라는 고객은 고객 엔터티에 고유 ID와 정보로 저장됩니다.
- 주문(Order)
- 고객이 생성한 주문 정보를 저장하는 엔터티.
- 속성: 주문 ID(Order_ID), 주문 날짜(Order_Date), 총 금액(Total_Amount).
- 설명: "홍길동"이 2024년 11월 19일에 총 50,000원을 구매했다면, 해당 주문이 이 엔터티에 기록됩니다.
- 제품(Product)
- 쇼핑몰에서 판매하는 상품 정보를 저장하는 엔터티.
- 속성: 제품 ID(Product_ID), 제품명(Product_Name), 가격(Price), 재고 수량(Stock).
- 설명: "노트북"이라는 상품이 제품 엔터티에 등록됩니다.
속성(Attribute)
- 정의: 엔터티가 가지는 특징이나 정보를 나타내는 필드입니다.
예시
- 고객(Customer):
- 고객 ID (Customer_ID): 각 고객을 고유하게 식별하는 값 (예: C001).
- 이름 (Name): 고객의 이름 (예: 홍길동).
- 이메일 (Email): 고객의 이메일 주소 (예: hong@example.com).
- 전화번호 (Phone Number): 고객의 연락처 (예: 010-1234-5678).
- 파생 속성:
- 나이(Age): 고객의 생년월일(Date of Birth)을 기반으로 계산.
- 예: 생년월일이 "2000-01-01"이라면, 2024년 기준 나이는 24세.
- 나이(Age): 고객의 생년월일(Date of Birth)을 기반으로 계산.
관계(Relationship)
- 정의: 두 개 이상의 엔터티 간의 연관성을 나타냅니다.
예시
- 고객(Customer) → 주문(Order)
- 관계 이름: 고객은 여러 주문을 할 수 있다(Customer places Order).
- 유형: 1관계 (한 고객이 여러 주문).
- 설명: "홍길동(Customer_ID: C001)"이 "O001"과 "O002" 두 개의 주문을 생성.
- 주문(Order) → 제품(Product)
- 관계 이름: 주문은 여러 제품을 포함한다(Order includes Product).
- 유형: N관계 (한 주문에 여러 제품, 하나의 제품이 여러 주문에 포함).
- 해결 방법:
- 중간 엔터티(Order_Item)를 생성하여 N관계를 1과 N:1로 분리.
- 속성: 주문 ID(Order_ID), 제품 ID(Product_ID), 수량(Quantity).
예제: 온라인 쇼핑몰 논리적 모델링
1. 엔터티
- 고객(Customer): 고객 ID, 이름, 이메일, 전화번호.
- 주문(Order): 주문 ID, 주문 날짜, 총 금액.
- 제품(Product): 제품 ID, 제품명, 가격, 재고 수량.
2. 속성
- 고객 속성: 이름(Name), 이메일(Email), 전화번호(Phone Number).
- 주문 속성: 주문 날짜(Order Date), 총 금액(Total Amount).
- 제품 속성: 제품명(Product Name), 가격(Price), 재고 수량(Stock).
3. 관계
- 고객(Customer) → 주문(Order): 고객은 여러 주문을 할 수 있다. (1)
- 주문(Order) → 제품(Product): 주문은 여러 제품을 포함할 수 있다. (N)
이번 위클리 페이퍼에서는 데이터베이스 설계의 핵심 개념인 정규화와 논리적 모델링에 대해 다뤄보았습니다. 정규화를 통해 데이터 중복을 줄이고 무결성을 보장하는 방법을 이해했고, 엔터티, 속성, 관계를 중심으로 데이터 구조를 체계적으로 설계하는 논리적 모델링의 중요성을 확인할 수 있었습니다.
데이터베이스는 설계 단계에서의 작은 차이가 데이터 처리 성능과 유지보수 효율성에 큰 영향을 미칠 수 있습니다. 이번 학습을 통해 데이터베이스 설계의 기본 원칙을 이해하고, 실무에서 이를 효과적으로 적용할 수 있는 자신감을 키웠습니다.
앞으로도 이러한 기본 개념을 바탕으로 더 복잡한 데이터 모델링과 최적화 방법을 배우며, 데이터 중심의 문제를 해결할 수 있는 역량을 계속 강화해 나가겠습니다. 😊
'스프린트 > 위클리페이퍼' 카테고리의 다른 글
[#16] 스프린트 DA 트랙 25주차 위클리 페이퍼(데이터 웨어하우스의 특징, BigQuery 성능 최적화) (1) | 2024.12.09 |
---|---|
[#15] 스프린트 DA 트랙 24주차 위클리 페이퍼(DAG와 Task의 관계, Operator의 종류와 활용 사례) (0) | 2024.11.27 |
[#13] 스프린트 DA 트랙 22주차 위클리 페이퍼(데이터 조회 및 필터링 쿼리, NULL) (0) | 2024.11.13 |
[#12] 스프린트 DA 트랙 19주차 위클리 페이퍼(모델의 편향과 분산, K-폴드 교차 검증) (0) | 2024.10.23 |
[#11] 스프린트 DA 트랙 18주차 위클리 페이퍼(지도 학습과 비지도 학습, 손실 함수) (0) | 2024.10.16 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!