SQLD 자격증을 취득하기 위하여 스파르타코딩클럽의 "SQLD 자격증 채린지" 수업을 수강한 내용을 복습 차원에서 정리한 내용이다.
SQLD 자격증 챌린지
단기간 SQLD 격파가 가능한, 격파르타 차별점
certificate-sqld.oopy.io
5일차 수업 목표는 데이터 모델 및 SQL 파트에 대한 개념을 학습하는 것이다.
아래 목차와 같이 내용을 정리할 예정이다.
- 관계와 조인의 이해
- 계층형 데이터 모델
- 상호배타적 개념
- 모델이 표현하는 트랜잭션의 이해
- NULL 속성의 이해
- 본질식별자 vs 인조식별자
5일차 수업 내용은 1과목인 데이터 모델링의 이해의 마지막 내용이다.
01. 관계와 조인의 이해
"관계 (Relationship)" 정의
관계형 데이터베이스(RDMS): 여러 테이블을 만들어서 데이터를 저장하는 것.
여기에 있는 여러 테이블 간의 연결이 관계이다.
부모의 식별자를 자식의 식별자에 포함하여 식별관계, 부모의 식별자를 자식의 일반 속성으로 상속하면 비식별관계이다.
주요 관계의 유형은 아래와 같다:
- 일대일 (One-to-One): 한 테이블의 레코드가 다른 테이블의 단 하나의 레코드와만 연결.
- 일대다 (One-to-Many): 한 테이블의 레코드가 다른 테이블의 여러 레코드와 연결.
- 다대다 (Many-to-Many): 한 테이블의 여러 코드가 다른 테이블의 여러 레코드와 연결. → 일반적으로 별도의 연결 테이블을 통해 구현된다. (A, B 테이블 + A와 B 테이블의 연결관계를 정리한 테이블)
"조인" 정의
두 개 이상의 테이블을 연결하여 데이터를 검색하는 데 사용되는 방법.
조인을 사용하면 여러 테이블에 흩어져 있는 정보를 결합하여 의미 있는 방식으로 데이터를 조회할 수 있다.
주요 조인 유형은 아래와 같다:
- 내부 조인 (Inner Join): 두 테이블의 교집합. 두 테이블 모두에서 일치하는 레코드만 결과에 포함.
- 외부 조인 (Outer Join):
- 왼쪽 외부 조인 (Left Outer Join/Left Join): 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 일치하는 레코드를 반환. 일치하는 레코드가 없는 경우, 오른쪽 테이블의 값은 NULL로 표시된다.
- 오른쪽 외부 조인 (Right Outer Join/Right Join): 이는 왼쪽 외부 조인의 반대로 작동한다.
- 전체 외부 조인 (Full Outer Join): 두 테이블의 합집합을 변환. 일치하지 않는 레코드는 NULL 값으로 표시된다.
*참고: 조인key란 두 테이블이 모두 포함하고 있는 속성이다.
만약 과목명이라는 엔티티와 강사명이라는 엔티티가 있다면, 각각의 조인 유형이 적용된 예시는 아래와 같다:
주문 내역
제품명 | 고객ID |
비누 | 1 |
핸드로션 | 2 |
핸드폰케이스 | 1 |
비누 | 3 |
바디로션 | 4 |
고객
고객ID | 이름 |
1 | 김가은 |
2 | 도민규 |
3 | 기은세 |
→ 내부 조인
제품명 | 고객ID | 이름 |
비누 | 1 | 김가은 |
핸드폰케이스 | 1 | 김가은 |
핸드로션 | 2 | 도민규 |
비누 | 3 | 기은세 |
→ 왼쪽 외부 조인
제품명 | 고객ID | 이름 |
비누 | 1 | 김가은 |
핸드폰케이스 | 1 | 김가은 |
핸드로션 | 2 | 도민규 |
비누 | 3 | 기은세 |
바디로션 | 4 | NULL |
→ 오른쪽 외부 조인
제품명 | 고객ID | 이름 |
비누 | 1 | 김가은 |
핸드폰케이스 | 1 | 김가은 |
핸드로션 | 2 | 도민규 |
비누 | 3 | 기은세 |
→ 전체 외부 조인
제품명 | 고객ID | 이름 |
비누 | 1 | 김가은 |
핸드폰케이스 | 1 | 김가은 |
핸드로션 | 2 | 도민규 |
비누 | 3 | 기은세 |
바디로션 | 4 | NULL |
02. 계층형 데이터 모델
☆SQLD 대비를 위해서는 계층형 데이터 모델의 개념만 알고 있으면 된다.
계층형 데이터 모델의 개념
계층형 데이터 모델이란, 데이터를 트리 구조로 표현하는 방식이다.
동일한 데이터에서 상하 구조가 있는 것이다.
각 계층은 다른 계층과 부모-자식 관계를 갖는다. 즉, 계층형 데이터 모델에서는 한 레코드가 자기 자신에 대한 관계를 가질 수 있다. → "순환 관계" 또는 "자기 참조 관계"
계층형 데이터 모델의 차별점은 자기 자신을 조인했다는 것, 셀프 조인(Self-Join)했다는 것이다.
03. 상호배타적 관계
☆SQLD 대비를 위해서는 상호배타적 관계가 무엇인지만 알고 있으면 된다.
상호배타적 관계 (Exclusive Relationship)
두 요소 또는 그룹 간의 관계 중에서 서로 중복되지 않고 상호 배타적인 경우를 의미.
한 요소 또는 그룹이 다른 요소 또는 그룹과 동시에 속할 수 없는 관계.
(만약 A가 아이스크림을 고른다면, B가 아이스크림이 아닌 케이크를 고를 때 A와 B는 상호배타적 관계에 있다고 표현할 수 있다.)
04. 모델이 표현하는 트랜잭션(Transaction)의 이해
트랜잭션의 이해
트랜잭션: 데이터베이스의 논리적 연산단위, 기본 처리 단위이다.
가상의 은행에서 두 계좌 간의 금액 이체를 통해 트랙잭션을 설명해보자면:
- 시작 (Begin): 트랜잭션은 어떤 일련의 작업을 나타내기 시작할 때 시작된다.
- A계좌에서 B계좌로 100달러를 이체하려는 트랜잭션이 시작된다.
- 작업 수행: 트랜잭션은 하나 이상의 작업으로 이루어진다.
- A계좌에서 100달러를 빼고, B계좌에 100달러를 더하는 두 가지 작업이 있다.
- 확인 (Commit): 모든 작업이 성공적으로 수행되었다면, 트랜잭션을 완료하기 위해 확인 단계로 넘어간다.
- A계좌에서의 인출과 B계좌로의 입금이 성공하면 트랜잭션을 커밋하여 최종 결과를 반영한다.
- 롤백 (Rollback): 하지만 추가에 어떤 문제가 발생한다면, 트랜잭션을 롤백하여 (트랜잭션이 시작하는 시점으로) 모든 작업을 취소할 수 있다.
- A 계좌에 잔고 부족 등의 이유로 트랜잭션이 실패한다면, 롤백을 통해 모든 작업을 취소하고 처음 상태로 돌아갈 수 있다.
- 끝 (End): 트랜잭션이 커밋되거나 롤백되면 해당 트랜잭션은 종료된다. 모든 작업이 반영되었거나, 아니면 아무런 알림도 주지 않은 상태로 끝나게 된다.
트랜잭션의 특징 → SQLD 문제가 자주 출제되는 영역
- 원자성 (Atomicity): 트랜잭션은 원자적인 작업의 단위로 간주된다. 이는 트랜잭션 내에서 수행되는 모든 작업이 성공하거나 실패할 경우 전체가 실패하는 것을 의미한다. 중간에 어떠한 작업이라도 실패하면 이전 상태로 롤백되어야 한다.
- 일관성 (Consistency): 트랜잭션이 완료된 후에도 데이터베이스가 일관된 상태여야 한다. 트랜잭션이 시작하기 전과 후에 일관성이 유지되어야 한다.
- 고립성 (Isolation): 여러 트랜잭션이 동시에 실행될 때, 각각의 트랜잭션이 서로 영향을 미치지 않도록 해야 한다.
- 지속성 (Durability): 트랜잭션이 성공적으로 완료된 경우, 해당 트랜잭션에서 수행한 변경 사항은 영구적으로 데이터베이스에 반영되어야 한다.
05. NULL 속성의 이해
NULL의 개념
NULL은 데이터베이스에서 특정 필드 또는 칼럼에 값이 없음을 나타내는 값이다.
알 수 없음, 아직 정의되지 않음 (미정), 데이터 없음의 의미로, 공백이나 숫자 0과는 전혀 다른 의미이다.
NULL의 특징
- 미정 상태
- 데이터의 부재
- 값의 비교 불가능
집계함수는 NULL값을 제외하고 처리한다.
- SUM 함수 (합계를 구하는 함수): 일반적으로 Null 값을 0으로 처리한다. 즉, Null 값을 제외하고 나머지 값들의 합을 계산한다.
- AVG 함수 (평균을 구하는 함수): Null 값을 제외하고 나머지 값들의 평균을 계산한다.
- COUNT 함수 (개수를 구하는 함수): 일반적으로 Null 값을 제외하고 유효한 값들의 개수를 세어준다.
- 단, COUNT(*) 함수는 NULL을 포함해서 모든 행의 수를 리턴한다. (*은 모든 값을 의미하는 기호이다. ALL이라는 의미이다.)
- MIN/MAX 함수 (데이터의 최소값과 최대값을 구하는 함수): Null 값을 무시하고, 나머지 값 중에서 최소값과 최대값을 찾는다.
NULL이 포함된 연산을 하려면, NVL/ISNULL 함수를 사용하여 NULL값을 0으로 처리한 후에 포함하여 함께 계산해준다.
06. 본질식별자 vs 인조식별자
식별자란?: 엔티티 내에서 어커런스(데이터)를 구분하는 구분자 (속성 또는 속성 그룹)
본질식별자 (Natural Key) vs 인조식별자 (Surrogate Key) 개념
본질식별자: 자연스럽게 (데이터 자체에 들어간) 만들어진 식별자. 업무에 의해 만들어진 식별자
- 장점:
- 데이터베이스에 의미 있는 정보를 포함하므로 인간이 읽고 이해하기 쉽다.
- 자연스럽게 발생하는 속성을 사용하므로 데이터 일치성이 높을 수 있다.
- 단점:
- 갱신 연산 부하: 데이터 속성의 변화나 형식 변경이 발생하면 식별자에도 영향을 미칠 수 있다. 일관성 유지가 어렵다.
- 길이와 복잡성: 복합 본질식별자의 경우 복잡성이 증가할 수 있고, 인덱스 크기도 중가한다. 저장 공간을 불필요하게 차지하게 되고 검색 성능이 감소할 수 있다.
인조식별자: 업무적으로 만들어지지는 않지만, 외부에서 인위적으로, 의도적으로 만들어진, 데이터와 무관한 특별한 식별자.
주로 시스템이나 데이터베이스 설계 목적으로 생성되며, 엔티티를 고유하게 식별하기 위한 보조적인 역할을 수행한다.
- 장점:
- 데이터 일관성이 유지되며, 데이터 변화에 대한 영향이 적다.
- 복합 본질식별자의 복잡성을 피할 수 있다.
- 단점:
- 비즈니스 의미 부족: 식별자 자체가 데이터베이스와 관련이 없어, 사용자가 직접 읽고 이해하기 어려울 수 있다.
- 추가적인 인덱스 관리: 중복되지 않도록 일련번호 등을 생성하기 위해 추가적으로 관리가 필요할 수 있다. 자동으로 생성되는 PK 인덱스 외에도 데이터 접근성을 높이기 위해 인덱스를 추가하게 되면, 저장공간을 더 차지하게 되고 DML 성능에 영향을 줄 수 있다.
- 인덱스 낭비: 불필요하게 많은 인덱스를 생성하는 경우, 저장 공간을 낭비하고 갱신 연산에 부하를 준다.
*참고: 인덱스(INDEX)란, 데이터베이스가 데이터를 빠르게 찾기 위해 순서를 유지하고 있는 데이터이다. 보통 PK로 설정된 칼럼은 자동적으로 INDEX가 걸려 있다.
- 장점: 데이터를 빠르게 찾을 수 있다.
- 단점: 정렬된 순서를 유지해야되기 때문에, 데이터가 추가되거나 삭제될 때, 인덱스를 유지하는 추가 작업이 필요하고 데이터 추가 용량이 필요하다. 또한, 인덱스를 잘 못 걸면 서치 속도가 굉장히 느려질 수 있다.
'데이터 분석일지 > SQLD 준비' 카테고리의 다른 글
SQLD 자격증 챌린지 7일차 강의: SELECT문, 단일행 함수, WHERE절 (0) | 2024.05.14 |
---|---|
SQLD 자격증 챌린지 6일차 강의: SQL 실습 환경 구성, 관계형 데이터베이스 알아보기 (0) | 2024.05.13 |
SQLD 자격증 챌린지 4일차 강의: 데이터 성능을 위한 정규화와 비정규화 (0) | 2024.05.11 |
SQLD 자격증 챌린지 3일차 강의: 데이터 모델링의 4가지 요소 (0) | 2024.05.09 |
SQLD 자격증 챌린지 2일차 강의: 데이터 모델링이란? (0) | 2024.05.09 |