본문 바로가기
학습

SQLD 자격증 따기 2 - 데이터 모델링의 이해

by 공덕뉸나 2023. 7. 6.

저번에 SQLD 준비를 했다는 글을 하나 올렸다.

공부 한 김에 챕터별로 내가 생각했을 때 중요한 내용들을 정리해볼까 한다. 

SQLD는 데이터 모델링의 이해와 SQL 기본 및 활용 총 2과목으로 나뉜다.

1과목은 10문제 2과목은 40문제가 출제되고 과락이 있으니 참고해서 공부하면 좋겠다.

 

데이터 모델링의 이해

데이터 베이스의 모델링은 현실 세계를 단순화하여 표현하는 기법이다.

모델링의 특성으로는 추상화, 단순화, 명확화가 있다.

 

1. 추상화 : 현실세계를 일정한 형식으로 표현하는 것

2. 단순화 : 복잡한 현실세계를 정해진 표기법으로 단순하고 쉽게 표현한다는 의미

3. 명확화 : 불분명함을 제거하고 명확하게 해석할 수 있도록 기술한다는 의미

 

모델링의 세 가지 단계

1. 개념적 데이터 모델링

2. 논리적 데이터 모델링

3. 물리적 데이터 모델링

 

데이터의 독립성

- 3단계 스키마 구조

외부 스키마 (사용자 관점) - 개념 스키마 (통합된 관점) - 내부 스키마 (물리적 관점)

- 3단계 스키마 구조가 보장하는 독립성

논리적 독립성 : 개념 스키마가 변경되어도 외부 스키마는 영향받지 않는다.

물리적 독립성 : 내부 스키마가 변경되어도 외부/개념 스키마는 영향받지 않는다.

 

ERD

ERD에서는 존재적 관계와 행위에 의한 관계를 구분하지 않지만 클래스다이어그램에서는 이것을 구분하여 연관관계와 의존 관계로 표현한다.

IE/Crow's Foot 표기법은 알아야한다.

 

ERD 작성순서는

1. 엔터티를 도출하고 그린다.

2. 엔터티를 적절하게 배치한다.

3. 엔터티 간의 관계를 설정한다.

4. 관계명을 기입한다.

5. 관계의 참여도를 기입한다.

6. 관계의 필수/선택 여부를 기입한다.

 

엔터티

데이터베이스에서 엔터티는 식별이 가능한 객체라는 의미를 가진다.

 

엔터티의 특징

1. 업무에서 쓰이는 정보여야 한다.

2. 유니크함을 보장할 수 있는 식별자가 있어야 한다.

3. 2개 이상의 인스턴스를 가지고 있어야 한다.

여기에서 인스턴스란 어떤 클래스에 속하는 각 객체로, 어떤 집합에 대해서 그 집합의 개별적인 요소를 말한다.

4. 반드시 속성을 가지고 있어야 한다.

5. 다른 엔터티와 1개 이상의 관계를 가지고 있어야 한다.

 

엔터티의 분류

엔터티의 분류는 외우는 것이 좋고 예시를 알고 있는게 좋다.

 

1. 유형 vs 무형

유형 엔터티 : 물리적인 형태 존재, 안정적, 지속적 (ex) 상품, 회원)

개념 엔터티 : 물리적인 형태 없음, 개념적 (ex) 부서, 학과)

사건 엔터티 : 행위를 함으로써 발생, 빈번함, 통계 자료로 이용 가능 (ex) 주문, 이벤트 응모)

 

2. 발생시점

기본 엔터티 : 독립적으로 생성됨, 자식 엔터티를 가질 수 있음 (ex) 상품, 회원)

중심 엔터티 : 기본 엔터티로부터 파생, 행위 엔터티 생성 (ex) 주문)

행위 엔터티 : 2개 이상의 엔터티로부터 파생 (ex) 주문 내역, 이벤트 응모 이력)

 

속성

하나의 속성은 하나의 속성값만 가질 수 있다.

 

엔터티, 인스턴스, 속성, 속성값의 관계

1. 한 개의 엔터티는 두 개 이상의 인스턴스를 갖는다.

2. 한 개의 인스턴스는 두 개 이상의 속성을 갖는다.

3. 한 개의 속성은 하나의 속성값을 갖는다.

 

분류

속성의 분류도 외우는 것이 좋고 속성이 어떤 속성에 속하는지도 알아야한다.

1. 특성에 따른 분류

기본 속성 : 업무 프로세스 분석을 통해 바로 정의 가능

설계 속성 : 설계하다 보니 필요하다고 판단되어 도출

파생 속성 : 다른 속성의 속성값을 계산하거나 특정한 규칙으로 변형하여 생성한 속성

 

2. 구성방식에 따른 분류

PK(Primary Key)속성 : 엔터티의 인스턴스들을 식별

FK(Foreign Key)속성 : 다른 엔터티의 속성에서 가져온 속성

일반속성 : PK, FK를 제외한 나머지 속성

 

도메인

속성이 가질 수 있는 속성값의 범위

엔터티를 정의할 때 데이터 타입과 크기로 나타낼 수 있다.

 

관계

관계는 엔터티와 엔터티의 관계를 의미하며, 어떠한 연관성이 있는지 타입을 분류하여 존재 관계와 행위 관계로 나눌 수 있다.

1. 존재 관계 : 존재 자체로 연관성이 있는 관계. ex) 직원과 부서, 학생과 학과

2. 행위 관계 : 특정한 행위를 함으로써 연관성이 생기는 관계. ex) 회원과 주문, 학생과 출석부

 

관계 표기법  (이것은 암기하도록 하자.)

관계명 : 관계의 이름

관계차수 : 관계에 참여하는 수

관계선택사양 : 필수인지 선택인지의 여부

 

식별자

식별자는 각각의 인스턴스를 구분 가능하게 만들어주는 대표 격인 속성을 의미한다.

 

주식별자의 특성 (암기)

- 유일성 : 각 인스턴스에 유니크함을 부여하여 식별이 가능하도록 한다.

- 최소성 : 유일성을 보장하는 최소 개수의 속성이어야 한다.

- 불변성 : 속성값이 되도록 변하지 않아야 한다.

- 존재성 : 속성값이 NULL일 수 없다.

 

분류 (속성을 보고 어떤 분류에 속하는지 알아야 한다.)

1. 대표성 여부 

- 주식별자 : 대표 식별자, 다른 엔터티와 참조 관계로 연결

- 보조식별자 : 다른 엔터티와 참조 관계로 연결되지 않음

2. 스스로 생성되었는지 여부

- 내부식별자 : 엔터티 내부에서 스스로 생성된 식별자

- 외부식별자 : 다른 엔터티에서 온 식별자

3. 단일 속성의 여부

- 단일식별자 : 하나의 속성으로 구성

- 복합식별자 : 두 개 이상의 속성으로 구성

4. 대체 여부

- 원조식별자 : 업무 프로세스에 존재하는 식별자

- 대리식별자 : 주식별자의 속성이 두 개 이상인 경우 그 속성들을 하나로 묶어서 사용하는 식별자

 

식별자 관계 vs 비식별자 관계

1. 식별자 관계

부모 엔터티의 식별자가 자식 엔터티의 주식별자가 되는 관계

2. 비식별자 관계

부모 엔터티의 식별자가 자식 엔터티의 주식별자가 아닌 일반 속성이 되는 관계

 

여기까지가 데이터 모델링의 이해와 관련된 내용이었다.

다음으로는 데이터 모델과 SQL에 관해 정리해보려고 한다.

 

데이터 모델과 SQL

정규화

정규화는 데이터 정합성을 위해 엔터티를 작은 단위로 분리하는 과정이다.

어떤 상황에서 어떤 정규화가 필요한지 알아야 한다.

 

1. 제1정규형

모든 속성은 반드시 하나의 값만 가져야 한다.

유사한 속성이 반복되는 경우도 1차 정규화의 대상이 된다.

 

2. 제2정규형

엔터티의 모든 일반속성은 반드시 주식별자에 종속되어야 한다.

주식별자가 복합식별자인 경우 일반속성이 주식별자의 일부에만 종속될 수 있는데 이 때 2차 정규화가 필요하다.

 

3. 제3정규형

주식별자가 아닌 모든 속성은 서로 종속될 수 없다.

 

반정규화

데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정이다.

이 때 조회 성능은 향상될 수 있지만 입력, 수정, 삭제 성능은 저하될 수 있다.

반정규화는 정규화가 끝난 뒤 거치게 된다.

 

테이블 반정규화

1. 테이블 병합

- 1:1 관계 테이블 병합

- 1:M 관계 테이블 병합

- 슈퍼 서브 타입 테이블 병합

2. 테이블 분할

- 테이블 수직 분할(속성 분할) : 엔터티의 일부 속성을 별도의 엔터티로 분할 (1:1 관계 성립)

- 테이블 수평 분할(인스턴스 분할, 파티셔닝) : 엔터티의 인스턴스를 특정 기준으로 별도의 엔터티로 분할 (파티셔닝)

3. 테이블 추가

- 중복 테이블 추가 : 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 별도의 엔터티를 추가

- 통계 테이블 추가 : 통계치를 미리 계산하여 저장

- 이력 테이블 추가 : 이력에 대한 데이터를 관리

- 부분 테이블 추가 

 

컬럼 반정규화

1. 중복 컬럼 추가

업무 프로세스상 JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려한다.

2. 파생 컬럼 추가

프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식이다.

3. 이력 테이블 컬럼 추가

대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가해 놓는 방식이다.

 

관계 반정규화(중복관계 추가)

업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리할 경우 고려한다.

 

반정규화 기법들도 다 알아야 한다. 

 

트랜잭션

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

 

NULL

NULL은 존재하지 않음, 값이 없음을 의미한다.

0이나 공백과 혼동하지 않도록 유의하자.

 

여기까지가 1과목에 관한 내용이다. 

나는 개념을 유선배로 익혔기 때문에 유선배를 바탕으로 요약정리 한 내용이며 추후에 노랭이 책으로 공부하면서 알게된 내용들도 추가할까 한다.

다음 글에서는 2과목을 정리해보려고 한다. 망망!

 

 

 

 

 

 

 

'학습' 카테고리의 다른 글

SQLD 자격증 따기5 - 관리 구문 및 후기  (0) 2023.07.13
SQLD 자격증 따기4 - SQL 활용  (0) 2023.07.12
SQLD 자격증 따기3 - SQL 기본  (0) 2023.07.10
SQLD 자격증 따기 1 - 책 소개  (0) 2023.07.05
트랜잭션이란?  (0) 2023.07.03