[SQLD 총정리] 1과목 2장 데이터 모델과 SQL

2024. 8. 23. 13:30·🏆 자격증/SQLD
728x90

정규화 

: 데이터베이스의 이상현상을 막기 위해, 데이터의 중복을 최소화하면서 테이블을 보다 잘 조직된 상태로 분해하는 과정

 

이상현상(Anomaly)

- 삽입이상

- 갱신이상

- 삭제이상

 

정규화의 결과

- 데이터의 입력, 수정, 삭제 성능 향상

- 조인의 횟수가 증가하면 데이터의 조회 성능 하락 가능성 증가(무조건적인 하락 X)

- 불필요한 트랜잭션을 줄일 경우 시스템 성능이 향상될 수 있다. 

 

정규화 절차 설명
제1정규화 릴레이션의 속성값이 모두 원자값만으로 구성되어야 한다. 
- 중복값을 제거한다.
- 기본키를 설정한다. 
제2정규화 기본키가 2개 이상의 속성으로 이루어진 경우 부분 함수종속성을 제거한다.
제3정규화 기본키를 제외한 칼럼 간의 종속성을 제거한다. 이행 함수종속성을 제거한다.
BCNF 기본키를 제외하고 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해한다. 

 

정규화 절차

제 1 정규화(비정규형 -> 1차 정규형)

: 하나의 속성이 여러 속성값을 갖거나 하나의 테이블에 유사한 속성이 반복될 때 이를 별도 테이블로 분리

* 분리한 테이블은 1 : M의 관계를 갖는다. 

[SQLD 모든 것] 06. 정규화 절차 ❘ 정규형 ❘ BCNF ❘ 아이리포

 

 

제 2 정규화(1차 정규형 -> 2차 정규형)

: (복합식별자의 경우) 일반 속성이 주식별자의 일부에만 종속성을 갖는 부분 함수종속성을 제거

[SQLD 모든 것] 06. 정규화 절차 ❘ 정규형 ❘ BCNF ❘ 아이리포

 

 

제 3 정규화(2차 정규형 -> 3차 정규형)

: 주식별자가 아닌 일반 속성 간에 함수종속성이 존재하는 이행 함수종속성을 제거

 

A -> B, B -> C 일 때, A -> C 이면 이 경우를 제거

[SQLD 모든 것] 06. 정규화 절차 ❘ 정규형 ❘ BCNF ❘ 아이리포

 

 

BCNF(보이스코드 정규화)

: 일반 속성이 기본키를 결정하는 경우


관계와 조인의 이해

슈퍼타입/서브타입 관계 테이블 병합

(반정규화 -> 테이블 병합에 대한 부분)

 

* 반정규화 하는 가장 큰 이유 -> 조회 성능 향상 

 

* 시스템의 운영 상황, 시스템의 운영되는 데이터, 조회하는 조회 스타일에 따라서 반정규화 하는 방법이 달라진다. 

 

* 테이블 병합 연산 (JOIN, UNION) -> CPU 부하 높다

  • One to One Type
    • 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성
  • Plus Type
    • 슈퍼타입 + 서브타입에 대해 발생되는 트랜잭션은 JOIN 연산에 의한 성능저하를 가져오므로
    • 슈퍼타입 + 서브타입 테이블로 구성
  • Single Type
    • 전체를 한 번에 조회하는 트랜잭션은 UNION 연산에 의한 성능저하를 가져오므로 
    • 전체를 하나의 테이블로 통합

[SQLD 모든 것] 07. 슈퍼타입, 서브타입 관계테이블 병합 ❘ 아이리포

 

슈퍼타입/서브타입 관계테이블 병합 예시

[SQLD 모든 것] 07. 슈퍼타입, 서브타입 관계테이블 병합 ❘ 아이리포


NULL 속성의 이해

NULL과의 연산

  • 단일행 연산
    • Null 값과의 연산 수행 결과는 Null
    • ex) 100 + Null = Null
  • 다중행 연산
    • Null 값인 행을 제외하고 연산 수행
    • ex) 10, 20, Null, 30 평균 = (10 + 20 + 30) / 3 = 20 
SELECT SUM(COL1 + COL2 + COL3 + COL4) FROM TBL; # 단일행 연산 - 행별로 연산
SELECT SUM(COL1) + SUM(COL2) + SUM(COL3) + SUM(C0L4) FROM TBL; # 다중행 연산 - 열별로 연산

본질식별자 VS 인조식별자(2024 시험 도입)

본질식별자(원조식별자)

: 업무에 존재하는 원래의 식별자로, 원조식별자라고도 한다. 

 

인조식별자(대리식별자)

: 업무에 존재하지 않으나 원래의 식별자가 너무 복잡하게 구성되어 있어 인위적으로 만든 식별자로, 대리식별자라고도 한다. 

* 복합식별자인 경우 주로 사용

 

 

본질식별자로 주식별자를 구성하는 경우

[SQLD 모든 것] 09. 본질식별자 VS 인조식별자

 

 

일련번호 형태의 인조식별자를 만들어 주식별자로 추가하는 경우

[SQLD 모든 것] 09. 본질식별자 VS 인조식별자

 

  • 인조식별자 사용의 장점
    • 추가적인 연산 없이 시퀀스나 키 제약조건 등을 통해 주식별자를 생성할 수 있으므로 개발의 편의성이 향상될 수 있다. 
  • 인조식별자 사용의 단점
    • 데이터의 중복이 발생할 수 있고 별도의 인덱스 생성 등이 필요하다. (운영 단계에서 인덱스 추가 후 성능 튜닝함)

=> 인조식별자는 모든 상황을 감안하고 고려해서 신중하게 결정해야 한다. 


References

[SQLD 모든 것] 아이리포

반응형

'🏆 자격증 > SQLD' 카테고리의 다른 글

[SQLD 총정리] 1과목 1장 데이터 모델링의 이해  (0) 2024.08.23
[SQLD 총정리] 2과목 3장 관리 구문  (0) 2024.08.22
[SQLD 총정리] 2과목 2장 SQL 활용  (0) 2024.08.22
[SQLD 총정리] 2과목 1장 SQL 기본  (0) 2024.08.22
[과목 2] 1장 SQL 기본  (0) 2024.08.19
'🏆 자격증/SQLD' 카테고리의 다른 글
  • [SQLD 총정리] 1과목 1장 데이터 모델링의 이해
  • [SQLD 총정리] 2과목 3장 관리 구문
  • [SQLD 총정리] 2과목 2장 SQL 활용
  • [SQLD 총정리] 2과목 1장 SQL 기본
zo0oz
zo0oz
꾸준함 기르기
  • zo0oz
    우당탕탕굴러가는하루
    zo0oz
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 🏠 Home
    • 📑 Tag
    • Github
    • 분류 전체보기 (295)
      • 📃 취준 회고록 (0)
        • 2024 하반기 (0)
      • 📅 매일매일 CS (2)
      • 🚩 Coding Test (203)
        • Baekjoon (94)
        • Programmers (43)
        • Code Tree (34)
        • SWEA (19)
        • HackerRank (2)
        • SQL (8)
      • 🇱 Languages (4)
        • Python (4)
      • 🇫 Framework (2)
        • fastAPI (2)
      • 🤖 AI (9)
        • LLM (1)
        • Computer Vision (3)
      • 📈 Data-Science (4)
        • Pandas (4)
      • 🛠️ 형상관리 (6)
        • Git (6)
      • 💥 Projects (8)
        • 개인실습 (7)
      • 🇰 Kakaotech Bootcamp (17)
        • 이론 (9)
        • 실습 (5)
      • 🇳 Naver BoostCourse (9)
        • 파이썬으로 시작하는 데이터 사이언스 (6)
      • 🏆 자격증 (25)
        • 정보처리기사 (10)
        • ADsP (1)
        • SQLD (13)
        • OPIc (0)
      • 🔎 etc (1)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
zo0oz
[SQLD 총정리] 1과목 2장 데이터 모델과 SQL
상단으로

티스토리툴바