[TIL] 정규화 및 트랜잭션&NULL 정복

Jeong Min·2025년 5월 23일
0

정규화란?
최소한의 데이터만을 하나의 엔터티에 넣는 식으로 데이터를 분해하는 과정
데이터의 중복을 제거하고 데이터 모델의 독립성을 확보.
논리 데이터 모델링 수행 시점에서 고려 (엔터티를 상세화하는 과정)
1~5 정규화 중 실질적으로 제 3정규화까지만 수행.
EX) 학생 엔터티에 넣을 데이터를 분류하는 것. 학생 엔터티에 지도교사는 필요 X.
이상현상을 줄이기 위한 설계 기법
이상현상?
정규화를 하지 않아 발생하는 현상(삽입이상, 갱신이상, 삭제이상)

정규화의 결과
데이터 입력,수정,삭제 성능 ▲
데이터의 조회 성능 하락 가능성 ▲(JOIN의 횟수가 증가함에 따라)

정규화 단계
1. 제 1 정규화 (1NF)
테이블의 컬럼이 원자성(한 속성이 하나의 값을 갖는 특성) 을 갖도록 테이블을 분해하는 단계

  • 유사한 속성이 반복될 때에도 분리. EX)1개월 수량,2개월 수량 = 수량
  • 하나의 행과 컬럼의 값은 반드시 하나의 값만 입력되도록 행을 분리.
    EX. 철수의 구매 물품이 샴푸와 린스여도 각각의 행으로 나누어 주는 것.
    2. 제 2 정규화 (2NF)
    제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만들도록 테이블을 분해하는 단계
  • 완전함수종속이란, 기본키를 구성하는 모든 컬럼의 값이 다른 컬럼을 결정짓는 상태
  • PK가 두개 이상일 때 발생하며 PK의 일부와 종속되는 관계가 있다면 분리
    EX. 기본키 (학생번호+강의명) 중 강의명 하나로만 강의실이 결정될 경우, 완전 함수 종속 위배.
    3. 제 3 정규화 (3NF)
    제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분리하는 단계
  • 이행적종속이란, A->B,B->C의 관계가 성립할 때, A->C가 성립되는 것을 말함.
  • (A,B)와 (B,C)로 분리하는 것.
    EX. 고객번호(A)에 의해 상품명(B)이 결정, 상품명(B)에 의해 가격(C)이 결정 될 때, 고객번호(A)에 의해서도 구매가격(C)이 결정됨.
    따라서 (고객번호,상품명),(상품명,가격)으로 분리하는 것이 제 3 정규화
  • 4NF의 목적 : 다중값 종속 (MVD) 제거
  • 5NF의 목적 : 조인 종속 제거

트랜잭션이란?
데이터 베이스 작업의 최소 실행 단위 / 하나의 연속적인 업무 단위.
EX. 100 만원 이체 시, -100과 +100이 동시에 이루어져야함. 모두 실패하거나, 성공하거나.

트랜잭션의 특징 (ACID)
1. 원자성(Atomicity) : 하나의 트랜잭션으로 묶인 연산은 ALL or NOTHING으로 실행된다.
2. 일관성(Consistency) : 트랜잭션 이전에 데이터베이스에 오류가 없다면 이후에도 오류가 없다.
3. 고립성(Isolation) : 독립적으로 수행되며, 다른 트랜잭션이 영향을 미치지 않는다.
4. 영속성(Durability) : 결과는 데이터베이스에 영구적으로 저장되어 유지된다.

트랜잭션 명령어
1. COMMIT : INSERT, UPDATE, DELETE와 같은 DML 명령들을 통한 변경사항을 데이터베이스에 영구적으로 반영하고 락을 해제하여 트랜잭션을 완료. 최종적으로 데이터베이스에 반영
2. ROLLBACK : 트랜잭션에 포함된 변경사항 또는 세이브포인트 이후의 변경 사항을 취소하고 되돌림.
3. SAVEPOINT : 롤백을 하기 위한 저장점을 지정.

  • SQL SERVER는 자동 커밋모드가 ON이어서 롤백 불가능. 단, BEGIN TRANSACTION에 의한 명시적 트랜잭션은 롤백 가능

필수적, 선택적 관계와 ERD
IE 표기법 : 필수적 관계 = 동그라미X / 선택적 관계 = 동그라미 표기
바커 표기법 : 필수적 관계 = 실선 / 선택적 관계 = 점선

NUUL 이란?
DBMS에서 값이 아직 정해지지 않았을 때.
NULL의 특성
1. NULL을 포함한 사칙연산 결과는 항상 NULL. (NULL은 0이 아니다)
-> 보완하려면? NULL을 치환해야함. "EX. NVL(컬럼,값), 컬럼이 NULL이면 값으로 치환"
2. 그룹 함수는 NULL을 제외하고 연산을 수행

  • 그룹함수(SUM,AVG,MIN,MAX)은 항상 NULL을 무시하고 연산
  • COUNT()는 NULL 상관 없이 모든 행의 수 리턴
    주의할 점!
    AVG의 경우 NULL도 포함해서 계산해야하는 경우가 있음.
    **이런 경우 SUM(컬럼)/COUNT(
    ) = 합계/총 컬럼 수**
  1. NULL은 JOIN 시에 결합 안됨.
    EX. A.COUNT=B.COUNT 시 A.COUNT와 B.COUNT의 NULL값은 서로 결합되는 것이 아니고 없는 취급.
  2. NULL 집합(NULL만 모인)에 대한 COUNT 결과는 0 / COUNT를 제외한 집계함수(SUM,AVG) 결과는 NULL
    • 공집합(WHERE절 조건에 만족하는 행이 없는 경우)의 집계함수 결과도 위와 동일
  3. NULL그룹 도 GROUP BY 결과로 출력됨 / HAVING 결과에 만족하는 그룹이 없으면 공집합 리턴.
    EX) 고객 2명의 번호가 NULL이면 구매 금액은 두 개의 합으로 그룹화
  • WHERE는 데이터가 없어도 1건으로 요약해주지만 HAVING은 그룹이기에 안보여줌. (집계함수)

NULL의 ERD 표기법
IE 표기법 : 알 수 없음.
바커 표기법 : 속성 앞에 동그라미가 있으면 NULL을 허용하는 속성

0개의 댓글