상세 컨텐츠

본문 제목

SQLD 공부 3일 차

SQL과 데이터베이스

by 크앙크아앙 2025. 5. 22. 19:12

본문

오늘은 어제 배운 정규화 관련한 내용을 복습하는 것을 시작으로 2개의 단원을 공부할 예정입니다.


제 1 정규화 과정

제1 정규화는 하나의 속성에 하나의 속성값 만이 존재해야 한다.

위의 첫 고객 주문 테이블을 확인하면 주문ID 001에 2개의 상품명이 존재한다.

따라서 인스턴스 하나에 하나의 상품만 존재하도록 분리 작업을 진행시켜야 한다.

 

제2 정규화 과정

제2 정규화는 부분함수종속성을 제거하는 과정입니다.

위의 테이블을 보면 전화번호는 고객과는 관련이 있지만, 주문과 실질적으로 관계가 없는 속성입니다. 

따라서 위의 테이블을 고객과 주문 두 개의 테이블로 분리하여 부분함수종속성을 제거해줘야 합니다.

 

제3 정규화 과정

제3 정규화는 이행함수종속성을 제거해야 합니다.

이행함수종속성은 a->b, b->c로 a가 무엇인지 알 경우 c까지 알 수 있는 경우를 얘기합니다.

위의 정규화에서 상품명을 알 경우 자연스럽게 상품 분류도 알 수 있기 때문에 이행함수종속성을 가지고 있습니다.

따라서 상품 테이블을 별도로 만들어줘 이행함수종속성을 제거해야 합니다.


7. 관계와 조인의 이해

 

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

 

반정규화/역정규화

 

- One to One Type(1:1 Type)

    - 개별로 발생하는 트랜잭션에 대해서는 개별 테이블로 구성

    - 슈퍼타입과 서브타입을 조회하는 경우가 둘 다 있을 경우

 

-Plus Type(Super Type + Sub Type)

    - 각각의 서브타입에 슈퍼타입을 합하여 슈퍼 + 서브의 테이블로 구성

    - 슈퍼타입 + 서브타입에 대해 발생하는 트랜잭션은 JOIN 연산에 의한 성능저하를 가져오므로 슈퍼타입 + 서브타입 테이블로 구성

    - 서브타입과 슈퍼타입을 구분하지 않고 서브타입을 조회할 때 슈퍼타입을 함께 조회한다

 

- Single Type(All in one Type)

    - 전체를 하나의 테이블로 통합

    - 대부분의 케이스를 동시에 조회하고 동시에 다룰 경우

    - 전체를 한 번에 조회하는 트랜잭션은 UNION 연산에 의한 성능저하를 가져오므로 전체를 하나의 테이블로 통합

 


8. Null 속성의 이해

- Null이란 정해지지 않은 값을 의미한다

 

1. 단일행 연산 (예시: 사칙연산)

- Null 값과의 연산수행 결과는 Null

- 하나의 인스턴스에 대한 계산

 

2. 다중행 연산 (예시: 통계)

- Null 값인 행을 제외하고 연산 수행

- 여러 인스턴스에 대한 계산

 

예시 문제

 

SELECT sum(국어+영어+수학+과탐+사탐) FROM 과목;
1. 각각의 단일행 연산 실행
-> 50, Null, Null, Null
2. 단일행 연산 결과를 다중행 연산 실행
-> 50

SELECT sum(국어)+sum(영어)+sum(수학)+sum(과탐)+sum(사탐) FROM 과목;
1. 각각의 다중행 연산 실행
->37, 24, 12, 24, 39
2. 다중행 연산 결과를 단일행 연산 실행
->136

'SQL과 데이터베이스' 카테고리의 다른 글

SQLD 공부 6일 차!  (1) 2025.05.30
SQLD 공부 5일 차  (6) 2025.05.27
SQLD 공부 4일 차  (1) 2025.05.23
SQLD 공부 2일 차  (4) 2025.05.22
SQLD 공부 1일차  (1) 2025.05.22

관련글 더보기