[SQLD] 데이터 모델링의 이해 - (2)

경운·2025년 10월 21일

자격증

목록 보기
2/3
post-thumbnail

🌱 데이터 모델과 성능

정규화

  • 엔티티를 분해(구조화)하는 과정
    1. 데이터 중복를 제거하고, 데이터 모델의 독립성 확보
    2. 데이터 이상현상을 줄이기 위한 데이터베이스 설계 기법

이상현상

  • 정규화를 하지 않아 발생하는 현상(삽입, 갱신, 삭제 이상)

  • 삽입 이상

    • 인스턴스가 삽입(추가)될 때, 정의되지 않아도 될 속성까지 입력해야 하는 상황
      -> 불필요한 정보까지 입력해야 하는 현상
  • 갱신 이상

    • 데이터를 수정할 때, 일부만 수정되어 데이터가 불일치 하는 현상
  • 삭제 이상

    • DB에서 특정 데이터를 삭제할 때 의도되지 않은 다른 정보까지 함께 삭제되는 현상

💡특징

  • 논리 데이터 모델링 수행 시점에 고려
  • 데이터 일관성, 최소한의 중복, 데이터 유연성 확보가 목적
  • 제 1 정규화 ~ 제 5 정규화까지 존재 (보통, 제 3 정규화까지 진행)

🌱 정규화 단계

제 1 정규화(1NF)

  • 테이블 컬럼이 원자성(한 속성이 하나의 값을 갖는 특성) 을 갖도록 테이블을 분해하는 단계

  • 제 1 정규화를 만족하지 않는 테이블

  • 제 1 정규화를 만족하는 테이블

하나의 행과 컬럼의 값이 반드시 한 값만 입력되도록 행을 분리하는 단계

제 2 정규화(2NF)

  • 제 1 정규화를 진행한 테이블에 완전 함수 종속을 만들도록 테이블을 분해하는 단계

  • 제 2 정규화를 만족하기 않는 테이블

  • 제 2 정규화를 만족하는 테이블


💡완전 함수 종속

  • 기본키의 부분 집합이 결정자가 되어선 안된다는 것을 의미
  • PK가 2개 이상 일 때 발생, PK의 일부와 종속되는 관계가 있을 때 분리

제 3 정규화(3NF)

  • 제 2 정규화를 진행한 테이블에 이행적 종속을 없애도록 테이블을 분리하는 단계

  • 제 3 정규화를 만족하지 않는 테이블

  • 제 3 정규화를 만족하는 테이블

💡이행적 종속

  • A → B, B → C의 관계가 성립할 때, A → C가 성립되는 것
  • (보통 A가 PK) (A, B) (B, C)로 분리하는 것이 정규화

🌱 관계와 조인

관계

  • 서로 다른 엔터티들 간에 존재하는 연관성을 의미
  • 관계를 맺는다는 의미는 부모의 식별자를 자식에 상속, 상속된 속성을 매핑키(조인키)로 활용

관계의 분류

  • 관계는 존재에 의한 관계와 행위에 의한 관계로 분류

예시

  • 존재에 의한 관계 - 두 엔터티 사이의 소유, 분류 등 존재에 의해 발생

    • 학교 - 학생
      • 학교 X → 학생 X
    • 주문 - 주문 상세
      • 주문 X → 주문 상세 X
  • 행위에 의한 관계 - 두 엔터티 사이 행위나 사건에 의해 발생

    • 고객 - 주문
      • 주문은 고객이 주문할 때 발생
    • 학생 - 수강
      • 수강은 학생이 수업을 수강할 때 발생

조인의 의미

  • 식별자를 상속하고, 상속된 속성을 매핑키로 활용하여 데이터를 결합하는 것

계층형 데이터 모델

  • 자기 자신끼리 참조하는 관계가 발생
  • 하나의 엔터티 내의 인스턴스끼리 계층 구조를 가지는 경우
  • 계층 구조를 갖는 인스턴스끼리 연결하는 조인 → 셀프 조인

상호 배타적 관계

  • 두 테이블 중 하나만 가능한 관계 (둘 중 하나만 상속 가능)

🌱 트랜잭션의 이해

트랜잭션 - 연속적인 업무 단위를 트랜잭션

  • 하나의 연속적인 엄무 단위
  • 트랜잭션에 의한 관계는 필수적인 관계 형태
  • 하나의 트랜잭션에는 여러 DML 등이 포함될 수 있음

예시

  • 민수가 영희에게 100만원을 이체하는 경우
    1. 민수 계좌에서 100만원이 존재하는지 확인
    2. 존재한다면, 민수 계좌에 100만원을 출금(-)
    3. 영희 계좌에 100만원을 입금(+)

💡하나의 흐름으로 전부 전송하거나 전부 실패 (트랜잭션의 특성 - 원자성)

트랜잭션의 특징

1. 원자성(Atomicity)

  • 모두 실행 or 모두 실행 X

2. 일관성(Consistency)

  • 트랜잭션 실행전 DB 데이터에 잘못된 것이 없다면, 트랜잭션 실행 후에도 잘못된 데이터가 없어야 함

3. 고립성, 격리성(Isolation)

  • 실행 중인 트랜잭션의 중간결과를 다른 트랜잭션이 접근이 불가
  • 수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조 불가

4. 지속성(Durability)

  • 트랜잭션이 성공적으로 수행되면 갱신된 데이터는 영구적으로 저장

🌱 NULL 속성

NUll

  • 아직 정해지지 않은 값
  • 0과 빈 문자열("")과는 다른 개념
  • 각 컬럼 별 Null을 허용할지 말지 정해야 함

Null의 특성

  • Null을 포함한 연산 결과는 항상 NULL
    • Null을 사전에 치환한 후 연산
이름잔액대출
김민수10000Null
박철수500-1000

SELECT 이름, 잔액 + 대출
FROM 금융
이름잔액 + 대출
김민수Null
박철수-500

SELECT 이름, 잔액+NVL(대출, 0)
FROM 금융
이름잔액 + 대출
김민수10000
박철수-500

💡NVL(C, 0)
컬럼 C에 NULL값은 0으로 치환럼 C에 NULL값은 0으로 치환


  • 집계함수는 NULL을 제외한 연산 결과를 반환
  • sum, avg, min, max등의 함수는 항상 NULL을 무시
이름잔액대출
김민수10000Null
박철수500-1000
이영희5000-500

SELECT COUNT(*), COUNT(잔액), COUNT(대출)
FROM 금융
COUNT(*)COUNT(잔액)COUNT(대출)
332
  • count(*)
    모든 컬럼이 NULL이면 제외 (그럴수가 없음)
  • COUNT(잔액)
    잔액이 NULL이면 제외
  • COUNT(대출)
    대출이 NULL이면 제외

🌱 본질식별자 vs 인조식별자

본질식별자

  • 업무에 의해 만들어지는 식별자
    • ex) 학번, 주민번호, 사번

인조식별자

  • 인위적으로 만들어지는 식별자
  • 꼭 필요하진 않지만 관리 편이성 등의 이유로 인위적으로 생성
  • 일반적으로, 자등으로 증가하는 일련번호의 형태로 기본키 사용

인조식별자 단점

  • 중복 데이터 발생 가능성 → 데이터 품질 저하
  • 불필요한 인덱스 생성 → 저장 공간 낭비 및 DML 성능 저하

0개의 댓글