[SQLD] 1-2. 데이터 모델과 SQL

0-x-14·2025년 3월 3일
0

SQLD

목록 보기
2/5




정규화 (Normalization)



  • 정규화
    • 엔터티를 작은 단위로 분리하는 과정
    • 입력, 수정, 삭제 성능 일반적으로 향상됨
    • 데이터의 무결성을 보장하기 위해 수행




  • 제1정규형
    • 모든 속성은 반드시 하나의 값만 가져야 함


  • 제2정규형
    • 모든 일반속성이 반드시 모든 주식별자에 종속되어야 함
    • 제2정규화 - 주식별자가 복합식별자인 경우 부분 종속을 없애야 함
    • 제2정규화 - 현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 뺌


  • 제3정규형
    • 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없음
    • 제3정규화 - 일반속성에만 종속된 속성은 다른 테이블로 뺌
    • 제3정규형을 만족하는 엔티티의 일반 속성은 주식별자 전체에 종속적임

✅ 어떤 릴레이션 R이 제2정규형이고, 기본키에 속하지 않은 속성 모두가 기본키에 이행적 함수종속이 아닐 때 제3정규형에 속한다.


✅ 정규화는 논리 데이터 모델의 일관성을 확보하고 중복을 제거하여 속성들이 가장 적절한 인스턴스에 배치되도록 한다.
     → 개념 데이터 모델 아님!!!! 논리 데이터 모델!!!!!!!!









반정규화 (De-Normalization)



  • 반정규화
    • 조회 성능 향상을 위해 데이터 중복 허용 / 데이터 그룹핑
    • 입력, 수정, 삭제 성능은 저하될수도
    • 정규화가 끝난 후에



  • 테이블 병합
    • 1:1 / 1:M / 슈퍼 서브 타입
    • JOIN이 많을 경우 고려
    • 1:M 테이블 병합 - 1쪽 엔티티 속성 개수가 적은 경우에만



  • 테이블 분할
    • 테이블 수직 분할
      • 일부 속성을 별도의 엔터티로. 1:1 관계 성립
      • 자주 사용 X거나 대부분의 속성값이 NULL일 경우 고려
    • 테이블 수평 분할
      • 인스턴스를 특정 기준으로 분할
      • 파티셔닝



  • 테이블 추가
    • 중복 테이블 추가
      • 필요할 경우 데이터 중복 감안
    • 통계 테이블 추가
      • 통계치 미리 계산하여 저장
    • 이력 테이블 추가
      • ex) 상품 가격 이력 테이블
    • 부분 테이블 추가
      • 특정 범위 데이터를 자주 처리할 경우



  • 컬럼 반정규화
    • 중복 컬럼 추가
    • 파생 컬럼 추가
    • 이력 테이블 컬럼 추가



  • 관계 반정규화
    • 중복 관계 추가









트랜잭션 (Transaction)



  • 트랜잭션
    • 데이터를 조작하기 위한 하나의 논리적인 작업 단위



  • 트랜잭션의 특징
    • 원자성
      • 전부 처리되거나 아예 하나도 처리되지 않아야 함
    • 일관성
      • 일관된 상태여야 함. 모순X
    • 고립성
      • 실행 중엔 다른 트랜잭션 접근 불가
    • 지속성
      • 성공적으로 실행 완료시 영속적으로 저장됨

✅ 순차적으로 수행되는 작업 A와 B가 원자성을 지닐 경우
     A까지만 수행하고 오류 발생했다면 A를 undo해야 함









NULL



  • NULL
    • 존재하지 않음. 값이 없음. 모르는 값



  • 가로 연산
    • NULL 포함시 결과값도 NULL

  • 세로 연산
    • NULL값 제외하고 연산



  • ✅ NULL과의 비교 연산 결과는 항상 Unknown (IS NULL 제외)
  • SUM,COUNT, AVG 등 집계함수는 NULL 제외하고 연산



✅ WHERE COL IS NULL과 WHERE COL = NULL은 다름!!!
✅ NULL = NULL 연산의 결과는 FALSE 또는 Unknown









본질식별자 vs 인조식별자



  • 본질식별자
    • 가공 X 원래의 식별자
    • 원조식별자

  • 인조식별자
    • PK 속성이 두 개 이상인 경우 하나로 묶어서 사용하는 식별자



  • 복합식별자인 경우 간결하게 대체하기 위해 인조식별자 생성 가능

✅ 인조식별자 사용시 중복 데이터 막기 어려워짐











출처

  • 유선배 SQLD 과외노트

0개의 댓글