일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- C
- 리눅스활용
- 파이썬
- 공부블로그
- Java
- 기사자격증
- 리눅스마스터2급
- IT자격증
- 리눅스
- 코딩
- 머신러닝
- 정보처리기사
- 프로그래밍
- 정처기
- Django
- 정보처리기사기출
- 리눅스마스터2급2차
- 웹개발
- 리눅스명령어
- 리눅스자격증
- 정보처리기사실기
- Linux
- 정처기기출
- 장고
- 리눅스마스터
- python
- 자격증
- 정처기실기
- IT
- SW
- Today
- Total
Tech Trail
[SQLD] 1과목 데이터 모델링의 이해 (전체) 요약 정리 본문
모델링이 갖춰야 할 조건
- 현실세계 반영
- 단순화하여 표현
- 관리하고자 하는 데이터를 모델로 설계
데이터베이스 모델링 세 가지 특징
- 추상화
- 단순화
- 명확화
데이터 모델링 세 가지 관점
- 데이터 관점
- 프로세스 관점
- 데이터와 프로세스의 상관 관점
데이터 모델링의 세 가지 단계
- 개념적 데이터 모델링
- 논리적 데이터 모델링
- 물리적 데이터 모델링
데이터 모델링 유의사항(데이터 모델링을 할 때 지양해야 할 점)
- 중복 -> 같은 데이터가 여러 엔터티에 중복되어 저장되지 않도록!
- 비유연성 -> 어플리케이션과 데이터 간 연계성이 높으면, 어플리케이션 변경될 때마다 데이터 모델도 변경해야 함 ㅠㅠ 데이터 모델과 프로세스를 분리하여 유연성을 높여야 함!
- 비일관성 -> 데이터 간 일관성을 유지하기 위해 상호 연관 관계 명확히!
ANSI-SPARC에서 정의한 3단계 스키마 구조
- 외부 스키마: View 단계로 여러 개의 사용자 관점으로 구성되는 것
- 개념 스키마: 모든 사용자 관점을 통합한 조직 전체 관점의 통합적인 표현
- 내부 스키마: 물리적인 저장 구조를 나타내는 것
3단계 스키마 구조가 보장하는 독립성
- 논리적 독립성: 개념 스키마가 변경되어도 외부 스키마는 영향받지 않음
- 물리적 독립성: 내부 스키마가 변경되어도 외부/개념 스키마는 영향받지 않음
시스템 분석을 위한 모델링의 기능
- 시스템이 향후 변화하고자 하는 모습으로 가시화
- 시스템을 구축하는 과정에서 결정한 것을 문서화
- 시스템을 구축하는 구조화된 틀 제공
- 시스템의 구조와 행동을 명세화
💡TIP
- 엔터티: Table
- 인스턴스: Row
- 속성: Column
엔터티 특징
- 업무에서 쓰이는 정보여야 함
- 유니크함을 보장할 수 있는 식별자가 있어야 함
- 2개 이상의 인스턴스를 가지고 있어야 함
- 반드시 속성을 가지고 있어야 함
- 다른 엔터티와 1개 이상의 관계를 가지고 있어야 함
엔터티를 발생시점에 따라 분류
- 기본 엔터티: 업무에 원래 존재하는 정보. 독립적으로 생성되어 자신만의 주식별자를 가지며 다른 엔터티의 부모 역할을 함 ex) 상품, 회원, 사원, 부서
- 중심 엔터티: 기본 엔터티로부터 파생되어 많은 데이터를 갖게 되며 행위 엔터티를 생성 ex) 주문, 매출, 계약
- 행위 엔터티: 두 개 이상의 부모 엔터티로부터 파생되고 보통 설계 초기 단계보다는 상세 설계 단계에서 많이 도출됨. 데이터가 자주 변경되거나 증가할 수 있음 ex) 주문 내역, 이벤트 응모 이력
유/무형에 따른 엔터티 분류
- 유형 엔터티
- 개념 엔터티
- 사건 엔터티
엔터티의 이름 정할 때 주의할 점
- 업무에서 실제로 쓰이는 용어 사용
- 한글은 약어를 사용하지 않고, 영문은 대문자 표기
- 단수 명사로 표현하고 띄어쓰기 X
- 다른 엔터티와 의미상 중복될 수 없음(주문, 결제 엔터티는 중복 가능)
- 해당 엔터티가 갖고 있는 데이터가 무엇인지 명확하게 표현
속성
- 한 개의 엔터티는 두 개 이상의 인스턴스를 갖는다
- 한 개의 인스턴스는 두 개 이상의 속성을 갖는다
- 한 개의 속성은 하나의 속성값을 갖는다
- 엔터티에 대한 구체적이고 명확한 정보를 나타낸다
속성_특성에 따른 분류
- 기본속성: 업무 프로세스를 통해 바로 정의가 가능한 속성 ex) 상품이름, 상품가격, 주민등록번호
- 설계속성: 업무에 존재하지는 않지만 설계하다 보니 필요하다고 판단되어 도출해낸 속성
- 파생속성: 다른 속성의 속성값을 계산하거나 특정한 규칙으로 변형하여 생성한 속성 ex) 이벤트응모건수
속성_구성방식에 따른 분류
- PK(Primary Key) 속성: 엔터티의 인스턴스들을 식별할 수 있는 속성 ex) 상품 엔터티의 상품코드, 학생 엔터티의 학번, 직원 엔터티의 사번
- FK(Foreign Key) 속성: 다른 엔터티의 속성에서 가져온 속성 / 다른 엔터티와 관계를 맺게 해주는 매개체 역할을 하는 속성 ex) 직원 엔터티의 부서코드, 학생 엔터티의 학과코드, 회원 엔터티의 회원등급코드
- 일반속성: PK, FK를 제외한 나머지 속성 ex) 상품 엔터티의 상품명, 가격, 학생 엔터티의 이름, 생년월일
도메인: 속성이 가질 수 있는 속성값의 범위
용어사전: 엔터티의 속성명을 정의할 때 명확한 의미를 부여하고 다른 엔터티와의 혼란을 방지하기 위해 이용
관계
- 존재 관계: 엄아와 아기처럼 존재 자체로 연관성이 있는 관계 ex) 직원과 부서, 학생과 학과
- 행위 관계: 특정한 행위를 함으로써 연관성이 생기는 관계 ex) 회원과 주문, 학생과 출석부
표기법
- 관계명: 관계의 이름
- 관계차수: 관계에 참여하는 수. 1:1, 1:M, M:N 형식으로 구분
- 관계선택사양: 필수인지 선택인지의 여부
주식별자
- 유일성: 각 인스턴스에 유니크함을 부여하여 식별이 가능하도록 한다
- 최소성: 유일성을 보장하는 최소 개수의 속성이어야 한다
- 불변성: 속성값이 되도록 변하지 않아야 한다
- 존재성: 속성값이 NULL일 수 없다.
분류
대표성 여부
- 주식별자: 유일성, 최소성, 불변성, 존재성을 가진 대표 식별자. 다른 엔터티와 참조 관계로 연결
- 보조식별자: 인스턴스를 식별할 수는 있지만 대표 식별자가 아님. 다른 엔터티와 참조 관계로 연결 X
스스로 생성되었는지 여부
- 내부식별자: 엔터티 내부에서 스스로 생성된 식별자
- 외부식별자: 다른 엔터티에서 온 식별자, 다른 엔터티와의 연결고리 역할
단일 속성의 여부
- 단일식별자: 하나의 속성으로 구성된 식별자
- 복합식별자: 두 개 이상의 속성으로 구성된 식별자
대체 여부
- 원조식별자: 업무 프로세스에 존재하는 식별자. 가공되지 않은 원래의 식별자(본질식별자)
- 대리식별자: 주식별자의 속성이 두 개 이상인 경우 그 속성들을 하나로 묶어서 사용하는 식별자(인조식별자)
식별자 관계 VS 비식별자 관계
- 식별자 관계: 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 되는 관계. 주식별자는 반드시 존재해야 하므로 부모 엔터티가 있어야 생성 가능하며 단일식별자인지 복합식별자인지에 따라 1:1이거나 1:M이거나가 결정된다.
- 비식별자 관계: 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 아닌 일반 속성이 되는 관계이다. 일반 속성의 속성값은 NULL이 될 수 있으므로 부모 엔터티가 없는 자식 엔터티 생성이 가능하고 마찬가지의 이유로 자식 엔터티가 존재하는 상태에서 부모 엔터티가 삭제될 수 있다.
식별자 관계
|
비식별자 관계
|
강한 관계
|
약한 관계
|
부모 엔터티의 식별자가 자식 엔터티의 주식별자
|
부모 엔터티의 식별자가 자식 엔터티의 일반속성
|
부모 엔터티가 있어야 생성 가능
|
부모 엔터티 없는 자식 엔터티 생성 가능
|
실선으로 표현
|
점선으로 표현
|
ERD 작성 순서
- 엔터티를 그린다
- 엔터티를 적절하게 배치한다
- 엔터티 간의 관계를 나타낸다
- 관계명을 정의한다
- 관계의 참여도를 나타낸다
- 관계의 필수 여부를 나타낸다
ERT 표기법 - IE/Crow's Foot(까마귀 발) 표기법
- 까마귀 발 기호는 2개 이상을 의미
- 엔터티는 사각형으로 표기
- 해시 마크( | )는 1개를 의미
- 점선은 비식별자 관계를 의미
성능 데이터 모델링: 데이터베이스의 성능을 향상시키기 위해 설계 단계부터 성능과 관련된 사항들이 모델링에 반영될 수 있도록 하는 것. 성능 데이터 모델링의 방법으로는 정규화, 반정규화, 테이블통합, 테이블 분할 등이 있음
성능 데이터 모델링의 순서
- 데이터 모델에 맞게 정규화를 수행한다
- 데이터베이스의 용량 및 트랜잭션 유형을 파악하여 성능 저하를 일으키는 부분이 없는지 검토
- 용량과 트랜잭션 유형에 맞게 반정규화를 수행
- 성능 향상을 위한 이력모델의 조정, PK/FK 조정, 슈퍼/서브타입 조정 등을 수행
- 데이터 모델의 성능 점검
정규화
- 데이터의 무결성을 보장하기 위해 수행
- 데이터에 대한 중복성을 제거한다
- 정규화를 할수록 엔터티가 증가하므로 JOIN으로 인한 조회 성능 저하가 발생할 수 있다.
- 데이터 입력, 수정, 삭제 성능이 향상된다
정규화
- 제1정규형: 모든 속성은 반드시 하나의 값만 가져야 한다. 유사한 속성이 반복되는 경우도 1차 정규화의 대상이 된다.
- 제2정규형: 엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다. ex) 주식별자가 주문번호와 음료코드인데, 일반속성인 음료명이 주식별자 중 음료코드 속성에만 종속
- 제3정규형: 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다. ex) 일반속성인 소속사명이 다른 일반속성인 소속사코드에 종속
반정규화
- 데이터에 대한 중복을 허용하거나 데이터를 그룹핑한다
- 조회 성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있으며 데이터 정합성 이슈가 발생할 수 있다
- 반정규화는 모든 정규화를 마친 후 성능상 이슈가 있을 때만 고려한다
반정규화_(1)테이블 반정규화
테이블 병합: 두 개 이상의 엔터티를 합체하는 것. 테이블의 관계가 강결합이어서 같이 조회되는 경우가 대부분일 경우 비정규화를 고려
- 1:1 관계 테이블 병합: 비교적 판단하기 수월하며 부작용도 적다
- 1:M 관계 테이블 병합: 많은 중복 데이터를 발생시키므로 주의가 필요
- 슈퍼 서브 타입 테이블 병합
테이블 분할
- 테이블 수직 분할(속성 분할): 테이블의 일부 속성을 별도의 테이블로 분리하는 것. 한 개의 블록에 더 많은 인스턴스를 저장할 수 있게 됨. 수직 분할하면 1:1 관계의 테이블이 두 개 생김. 속성의 사용 빈도나 속성값의 NULL 여부를 기준으로 분할할 수 있음
- 테이블 수평 분할(인스턴스 분할, 파티셔닝): 테이블의 특정 인스턴스를 별도의 테이블로 분할. 데이터베이스의 파티셔닝 기법을 주로 이용. 테이블 수평 분할을 할 경우 관계가 없는 다수의 테이블이 생성됨. 테이블 수평 분할의 기준은 주로 기간이지만 다른 속성이 될 수도 있음
테이블 추가
- 중복 테이블 추가: 특정 범위의 많은 데이터를 자주 처리해야 하는 경우, 정규화로 인한 성능 감소가 발생한 경우, 미리 계산된 값을 저장해둠으로써 어플리케이션 성능을 향상시키려는 경우
- 통계 테이블 추가
- 이력 테이블 추가
- 부분 테이블 추가
반정규화_(2)칼럼 반정규화
중복 컬럼 추가: 업무 프로세스상 JOIN이 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려
파생 컬럼 추가: 프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식 ex) 상품의 재고, 프로모션 적용 할인가
이력 테이블 컬럼 추가: 대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기분이 될 것으로 판단되는 컬럼을 미리 추가해 놓는 방식 ex)최신 데이터 여부
반정규화_(3)중복관계 추가: 업무 프로세스상 JOIN이 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우 고려. 데이터 무결성을 깨뜨릴 위험성 없이 데이터 처리 성능을 향상시킬 수 있는 기법
트랜잭션: 데이터를 조작하기 위한 논리적인 작업 단위로, 데이터 모델로 표현할 수 있으며 데이터는 트랜잭션 범위로 묶일 수 있음. 하나의 커밋 단위로 묶여야 한다!
NULL 연산
- NULL이 포함된 사칙연산의 결과는 항상 NULL
- 데이터를 집계할 때 NULL은 집계 대상에서 제외
- WHERE COL IS NULL 조건은 COL 값이 NULL인 행을 반환하지만, COL=NULL의 결과는 항상 False이므로 WHERE COL = NULL 조건은 아무 행도 반환하지 않음
- WHERE COL IS NOT NULL 조건은 COL이 NULL이 아닌 행만 출력하는 조건
Q. 다음 SQL 결과로 가장 적절한 것은 무엇인가?
SELECT SUM(COL1), SUM(COL2) FROM SAMPLE WHERE COL2 > 5;
COL1
|
COL2
|
10
|
5
|
20
|
NULL
|
NULL
|
15
|
<답>
COL1
|
COL2
|
NULL
|
15
|
<해설> NULL과의 비교 연산 결과는 늘 NULL이기 때문에 COL2 > 5 조건을 만족하는 행은 세 번째 행만 해당
Q. 다음 SQL의 결과로 가장 적절한 것은 무엇인가?
SELECT SUM(COL1), SUM(COL2)
FROM SAMPLE
WHERE COL2 IS NOT NULL;
[SAMPLE 테이블]
COL1
|
COL2
|
10
|
5
|
20
|
NULL
|
NULL
|
15
|
<답>
COL1
|
COL2
|
10
|
20
|
<해설> NULL이 포함된 집계 함수는 NULL을 제외하고서 계산된다.
'IT Learning > SQLD(SQL 개발자)' 카테고리의 다른 글
[SQLD] 2과목 SQL 기본 및 활용 (PART3 관리 구문) 요약 정리 (0) | 2023.11.18 |
---|---|
[SQLD] 2과목 SQL 기본 및 활용 (PART2 SQL활용) 요약 정리 (0) | 2023.11.18 |
[SQLD] 2과목 SQL 기본 및 활용 (PART1 SQL기본) 요약 정리 (0) | 2023.11.18 |