20221023_WIL(SQLD part.1)
들어가며
실전 프로젝트에서의 개발 경험을 바탕으로 RDB와 SQL에 흥미가 생겼고 마침 오는 11월 초, SQLD 자격 시험이 있다는 소식에 시험을 준비하게 되었다. 항해를 수료한 시점에서 적당한 긴장감을 주기에 좋은 방법인 것 같다.
금주의 WIL은 SQLD 자격 시험을 준비하며 필기했던 내용을 게시글로 옮겨보려 한다.
챕터 1 - 데이터 모델링의 이해
데이터베이스의 모델링은 '현실 세계를 단순화하여 표현하는 기법'이다.
모델링이 갖춰야 할 조건
- 현실 세계를 반영해야 한다.
- 단순화하여 표현해야 한다.
- 관리하고자 하는 데이터를 모델로 설계한다.
모델링의 특징
- 추상화(간략화)
- 단순화
- 명확화
모델링의 세 가지 관점
- 데이터 관점
- 프로세스 관점
- 데이터와 프로세스 관점
모델링의 세 가지 단계
1. 개념적 데이터 모델링
➡ 전사적 데이터 모델링 수행 시 행해지며 추상화 레벨이 가장 높은 모델링
이 단계에서는 업무 중심적이고 포괄적인 수준의 모델링이 진행된다.
2. 논리적 데이터 모델링
➡ 재사용성이 가장 높은 모델링으로 데이터베이스 모델에 대한 key, 속성, 관계 등을 표현
3. 물리적 데이터 모델링
➡ 실제 DB로 구현할 수 있도록 성능이나 가용성 등의 물리적 성격을 고려하여 모델을 표현하는 단계
3단계 스키마 구조
스키마 : 데이터의 구조 / DB의 설계 / ERD의 포괄적 개념
1. 외부 스키마 ➡ 사용자의 관점
Multiple User's View 단계로 각 사용자(+응용 프로그래머)가 보는 DB의 스키마를 정의
2. 개념 스키마 ➡ 통합된 관점
Community View of DB 단계로 모든 사용자가 보는 데이터베이스의 스키마를 통합하여 전체 데이터베이스를 나태는 것
DB에 저장되는 데이터들을 표현하고 데이터들 간의 관계를 나타낸다.
3. 내부 스키마 ➡ 물리적인 관점
Physical Representation 단계로 물리적인 저장 구조를 나타낸다.
실질적인 데이터의 저장 구조나 컬럼 정의, 인덱스 등이 포함된다.
엔터티의 분류
1. 유형/무형
- 유형 엔터티 : 물리적인 형태의 존재, 안정적, 지속적 - ex)상품, 회원
- 개념 엔터티 : 물리적인 형태 없음, 개념적 - ex) 부서, 학과
- 사건 엔터티 : 행위를 함으로써 발생, 빈번함, 통계 자료로 이용 가능 - ex)주문, 이벤트 응모
2. 발생 시점
- 기본 엔터티 : 독립적으로 생성됨, 자식 엔터티를 가질 수 있음 - ex) 상품, 회원
- 중심 엔터티 : 기본 엔터티로부터 파생, 행위 엔터티 생성 - ex) 주문
- 행위 엔터티 : 2개 이상의 엔터티로부터 파생 - ex) 주문내역, 이벤트 응모 내역
엔터티의 이름을 정할 때 주의할 점
- 업무에서 실제로 쓰이는 용어 사용
- 한글은 약어를 사용하지 않고 영문은 대문자 표기
- 단수 명사로 표한하고 띄어쓰기는 하지 않음
- 다른 엔터티와 의미상으로 중복될 수 없음
- 해당 엔터티가 갖고 있는 데이터가 무엇인지 명확하게 표현
속성
➡ 속성의 분류
특성에 따른 분류
- 기본속성 : 업무 프로세스 분석을 통해 바로 정의가 가능한 속성
- 설계속성 : 업무에 존재하지는 않지만 설계하다 보니 필요하다고 판단되어 도출해낸 속성
- 파생속성 : 다른 속성의 속성값을 계산하거나 특정한 규칙으로 변형하여 생성한 속성
구성방식에 따른 분류
- PK속성
- FK속성
- 일반속성
엔터티의 속성명을 정의할 때 명확한 의미의 이름을 부여하고 다른 엔터티와의 혼란을 예방하기 위해 용어사전을 이용한다.
관계
- 존재관계 : 존재 자체로 연관성이 있는 관계를 의미 - ex) 직원과 부서, 학생과 학과
- 행위관계 : 특정한 행위를 함으로써 연관성이 생기는 관계 - ex) 학생과 출석부
관계 표기법
- 관계명 : 관계의 이름
- 관계차수(Cardinality) : 관계에 참여하는 수 - (1:1관계, 1:M관계, N:M관계)
- 관계선택사양 : 필수인지 선택인지의 여부
식별자
주식별자
- 유일성 : 각 인스턴스에 유니크함을 부여하여 식별이 가능하도록 한다.
- 최소성 : 유일성을 보장하는 최소 개수의 속성이어야 한다.
- 불변성 : 속성값이 되도록 변하지 않아야 한다.
- 존재성 : 속성값이 NULL 일 수 없다.
분류
1, 대표성 여부
- 주식별자 : 유일성, 최소성, 불변성, 존재성을 가진 대표 식별자. 다른 엔터티와 참조 관계로 연결
- 보조식별자 : 인스턴스를 식별할 수는 있지만 대표 식별자가 아님. 다른 엔터티와 참조 관계로 연결되지 않음
2. 스스로 생성되었는지 여부
- 내부 식별자 : 엔터티 내부에서 스스로 생성된 식별자
- 외부 식별자 : 다른 엔터티에서 온 식별자, 다른 엔터티와의 연결고리 역할
3. 단일 속성의 여부
- 단일 식별자 : 하나의 속성으로 구성된 식별자
- 복합 식별자 : 두 개 이상의 속성으로 구성된 식별자
4. 대체 여부
- 원조 식별자 : 업무 프로세스에 존재하는 식별자. 가공되지 않은 원래의 식별자(본질 식별자)
- 대리 식별자 : 주식별자의 속성이 두 개 이상인 경우 그 속성들을 하나로 묶어서 사용하는 식별자(인조 식별자)
챕터2 - 데이터 모델과 SQL
정규화
데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정 이다.
정규화를 할 경우 조회 성능은 향상될 수 도, 저하될 수 도 있다.
입력, 수정, 삭제 성능은 일반적을 향상된다.
⭐종속성 제거라 하면 정규화를 의미
제 1 정규형
모든 속성은 반드시 하나의 값만을 가져야 한다.
➡ 특정 칼럼에 다수의 값이 들어가면 안됨
(목적- 원자값이 아닌 도메인을 분해)
제 2 정규형
엔터티의 모든 일반 속성은 반드시 모든 주식별자에 종속되어야 한다.
➡ 주식별자가 복수일 경우, 일반속성이 모든 주식별자에 종속되지 않고 특정 주식별자에만 종속될 경우 정규화 필요
(목적 - 부분 함수 종속성을 제거)
제 3 정규형
주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.
➡ 주식별자가 아닌 일반속성에게 종속된다면 정규화 필요
(목적 - 이행 함수 종속성을 제거)
반정규화
데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정
조회 성능은 향상되나 입력, 수정, 삭제 성능은 저하될 수 있다.
정규화를 했을 때 조회 성능이 심각하게 저하되는 경우 반정규화를 고려한다.
반정규화를 하면 데이터 무결성이 저해된다 볼 수 있다.
반정규화 방법
1. 테이블 병합
업무 프로세스 상 JOIN이 필요하 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우 고려
- 1:1 관계 테이블 병합
- 1:M 관계 테이블 병합
- 슈퍼 서브 타입 테이블 병합
2. 테이블 분할
ⓐ 테이블 수직 분할
엔터티의 일부 속성을 별도의 엔터티로 분할(1:1 관계 성립)
➡ 자주 사용하는 속성이 아니거나 대부분의 인스턴스가 해당 속성값을 NULL로 갖고 있을 때 고려
ⓑ 테이블 수평 분할
엔터티의 인스터스를 특정 기준으로 별도의 엔터티로 분할(파티셔닝)
➡ ex) 파티션 기능을 사용하여 주문일자에 따라 데터를 물리적으로 분리(기간 외 다른 기준도 적용 가능)
3. 테이블 추가
ⓐ 중복 테이블 추가 ➡ 데이터의 중복은 감안하더라도 성능 상 반드시 필요하다 판단되는 경우 별도의 엔터티를 추가
ⓑ 통계 테이블 추가 ➡ ex) 주문 - 지점별 월 매출
ⓒ 이력 테이블 추가 ➡ ex) 상품 - 상품 가격 이력
ⓓ 부분 테이블 추가 ➡ ex) 회원 - 회원이메일(회원 대상 메일 발송 건이 많을 경우)
+(2) 컬럼 반정규화
ⓐ 중복 컬럼 추가
ⓑ 파생 컬럼 추가 ➡ 프로세스 수해 시 부하가 염려되는 계산 값을 미리 컬럼으로 추가
ex) 프로모션 진행 시 상품 재고와 프로모션 적용 할인가 등
ⓒ 이력 테이블 컬럼 추가 - ex) 최신 데이터 여부
+(3) 관계 반정규화(중복관계 추가)
➡ 반정규화임에도 데이터의 무결성을 깨뜨릴 위험 없이 데이터 처리의 성능을 향상시킬 수 있는 반정규화 기법
트랜잭션
데이터를 조작하기 위한 하나의 논리적인 작업 단위
ex) 이벤트 응모 이력을 저장한다.
쿠폰을 발행한다.
➡ 하나의 트랜잭션(실패 시 롤백!)
NULL
가로 연산) NULL이 포함되어 있으면 결과값은 NULL이 된다.
세로 연산) 다른 인스턴스의 데이터와 연산할 때는 NULL 값을 제외한다.
데이터베이스의 성능을 향상시키기 위해 설계 단계부터 성능과 관련된 사항들이 모델링에 반영될 수 있도록 하는 것
➡ 성능 데이터 모델링
데이터 모델링 순서
- 데이터 모델에 맞게 정규화를 수행
- 데이터베이스의 용량 및 트랜잭션 유형을 파악
- 데이터베이스의 성능을 고려하여 반정규화를 수행
- 성능 향상을 위한 이력모델의 조정, PK/FK 조정, 슈퍼/서브 타입 조정을 수행
- 데이터 모델의 성능을 검증
항해를 수료하면 무언가 굉장한 일이 벌어질 것이라고 은연중에 기대하고 있었던 것 같다.
하지만 수료 후에도 항해 기간과 별반 다를 것이 없다.
다만 항해를 통해서 공부하는 습관을 제대로 들인 것 같다.
아침부터 밤까지 공부하고 주말에도 공부하는 것이 몸에 배어, 하루 정해놓은 양의 공부를 하지 않으면 마음이 불편하다.
이렇게 지내다보면 또 언젠가는 좋은 소식들도 들려오겠지..?
'WIL👨🏫' 카테고리의 다른 글
20221204_WIL(SQLD 합격) (0) | 2022.12.04 |
---|---|
20221030_WIL(SQLD part.2) (0) | 2022.10.30 |
20221016_WIL(항해99 회고록) (0) | 2022.10.20 |
20221009_WIL(항해99 실전프로젝트 회고) (0) | 2022.10.09 |
20221002_WIL(실전 프로젝트 6주차 회고 및 검색 메서드 리팩터링) (0) | 2022.10.03 |