SQLD 1과목 2장(데이터 모델과 SQL) 정리

728x90

Key Results

  • SQLP 과목1 - 데이터 모델링의 이해 부분 정리

Contents

정규화

정규화(Normlization)은 가장 기초적이지만 필수적으로 이뤄져야 하는 작업.

  1. 제1 정규형 : 모든 속성은 반드시 하나의 값을 가져야 한다
    • 아래와 같이 중복된 값이 없도록 엔터티 추가 필요
  1. 제2정규형 : 엔터티의 일반속성은 주식별자 전체에 종속적이여야 한다.
    • 데이터가 반복 사용되는 것을 방지하기 위해 일반 속성은 주식별자 전체에 종속적이여야 한다. 2번째 이미지처럼 주문상세 엔터티에서는 상품번호만 가지고 있고, 상품번호를 매핑하여 상품명 데이터를 가져올 수 있다. 이를 흔히 Join이라고 한다.
  1. 제3정규형 : 엔터티의 일반속성 간에서는 서로 종속적이지 않다.
    • 고객이 이름을 바꿔 고객명이 변경되었다면 주문 엔터티에 고객명을 전부 갱신해야 한다. 이는 주문과 무관한 트랜잭션이다.
    • 따라서 고객 엔터티를 분리하여 서로 독립적으로 관리해야 한다.
  1. 반정규화와 성능
    • 반정규화는 정규화를 반대로 하는 것으로 역정규화라고도 한다. 정규화는 데이터 중복을 최소화하는 것이라면 반정규화는 성능을 위해 데이터 중복을 허용하는 것이다. 따라서 성능이 문제되는 상황시, 반정규화에 대해 논의하게 된다.
    • 반정규화 모델에서 성능이 향상될 수 있는 경우
    • 아래와 같이 결제 엔터티에 '결재번호' 속성을 반정규화할 경우, 고객번호,코드,결제일시 정보만 가지고, 결제수단 번호를 획득할 수 있다.

관계와 조인의 이해

관계(Relation)은 사전적으로 정의하면 '상호 연관성이 있는 상태'를 의미한다. Join은 식별자를 상속하고, 상속된 속성을 매핑키로 활용하여 데이터를 결합해 볼 수 있다는 의미이다.ㅇ

  1. 조인의 예시
  1. 계층형 데이터 모델
    • 계층 구조를 가진 데이터를 지칭함
    • 자기자신을 조인(self-join) 할 수 있음.
  1. 상호배타적 관계
    • 아래 모델은 개인, 법인 고객이 존재하는 모델에서 주문과의 상호배타적 관계를 표현하고 있다. 즉, 주문은 개인, 법인 둘중 하나만 가능하다

모델이 표현하는 트랜잭션의 이해

트랜잭션은 데이터베이스의 논리적 연산단위로서 계좌 이체에 대해 많이 얘기함. 데이터 정합성을 위해 보내는 사람과 받는 사람의 업무가 묶여서 동시에 진행되어야 하는 단위를 트랜잭션이라고 함.

Null 속성의 이해

DBMS를 사용하다보면 NULL로 인한 많은 특이사항을 접하게 되는데 NULL 값이 가지는 특성을 이해하지 못한다면 데이터 오류를 경험할 수 있으므로 반드시 숙지가 필요.

  1. Null 값의 연산은 언제나 Null
  1. 집계함수는 Null 값을 제외하고 처리

본질식별자 vs 인조식별자

엔터티는 반드시 데이터를 식별할 수 있는 속성이 존재해야 하는데 이를 우리는 식별자라고 배움. 식별자는 대체 여부에 따라 본질식별좌와 인조식별자로 구분

  1. 본질식별자 : 업무에 의해 만들어진 식별자
  1. 인조식별자 : 업무적으로 만들어지진 않지만 본질식별자가 복잡한 구성을 갖고 있으므로 인위적으로 만든 식별자
  1. 종복 데이터로 인한 품질 문제
    • 외부 식별자를 사용하면 중복 데이터를 막을 수 없음.
    • 기본키의 제약을 활용한다면 중복데이터를 원천 차단할 수 있지만, 기본키를 인위적으로 생성한 속성으로 정의하였기 때문.
  1. 불필요한 인덱스 생성
    • 본질식별자와 인조식별자를 사용했을 때 인덱스 구성에 대한 차이

REF

  • -
728x90