[SQLD]230301 sqld
데이터 모델링의 이해
데이터 모델링의 이해
모델링: 현실 세계를 단순화하여 표현하는 기법
모델링이 갖춰야 할 조건
- 현실 세계를 반영해야 한다
- 단순화하여 표현해야 한다
- 관리하고자 하는 데이터를 모델로 설계한다
모델링의 특징
추상화, 단순화, 명확화
모델링의 세 가지 관점
- 데이터 관점: 어떤 데이터들이 업무와 얽혀있는지, 데이터 간에 어떤 관계가 있는지 모델링
- 프로세스 관점: 업무가 실제로 처리하고 있는 일과 앞으로 처리해야 할 일이 무엇인지 모델링
- 데이터와 프로세스의 상관 관점: 프로세스에 따라 데이터가 어떤 영향을 받는지 모델링
모델링의 세 가지 단계
- 개념적 데이터 모델링: 추상화 best. 업무 중심적이고 포괄적인 수준의 모델링
- 논리적 데이터 모델링: 재사용성 best. DB 모델에 대한 키, 속성, 관계 모두 표현
- 물리적 데이터 모델링: 실제 DB로 구현할 수 있도록 성능, 가용성 등을 고려해 모델 표현
데이터의 독립성
- 3단계 스키마 구조
외부 스키마(사용자 관점): 각 사용자가 보는 DB의 스키마 정의
개념 스키마(통합된 관점): DB에 저장되는 데이터 및 데이터 간 관계 표현
내부 스키마(물리적 관점): 실질적인 데이터 저장 구조, 컬럼 정의 ,인덱스 등 포함
- 보장되는 독립성
논리적 독립성: 개념 스키마가 변경되어도 외부 스키마는 영향받지 않는다
물리적 독립성: 내부 스키마가 변경되어도 외부/개념 스키마는 영향받지 않는다
ERD(Entity Relationship Diagram)
시스템에 존재하는 엔터티와 그들간의 관계를 나타내는 다이어그램
- 표기방식
Peter Chen, IDEFIX, IE/Crow’s Foot, Min-Max/ISO, UML, Case Method/Barker
- IE/Crow’s Foot 표기법
ㅁ 엔터티
ㅇ | 0개 |
ㅣ | 1개 |
⪫ | 2개 |
실선 | 식별자 관계(부모 엔터티 식별자가 자식 엔터티의 주식별자) |
점선 | 비식별자 관계(부모 엔터티 식별자가 자식 엔터티 일반 속성) |
엔터티(Entity)
업무에서 쓰이는 데이터를 용도별로 분류한 그룹
엔터티의 특징
업무에서 쓰이는 정보여야 함
유니크함을 보장할 수 있는 식별자가 있어야 함
2개 이상의 인스턴스를 가지고 있어야 함
반드시 속성을 가지고 있어야 함
다른 엔터티와 1개 이상의 관계를 가지고 있어야 함
엔터티의 분류
- 유형 vs. 무형
유형 엔터티: 물리적 형태 존재, 안정적, 지속적
개념 엔터티: 물리적 형태 없음, 개념적
사건 엔터티: 행위를 함으로써 발생, 통계 자료로 이용 가능
- 발생시점
기본 엔터티: 독립적으로 생성, 자식 엔터티를 가질 수 잇음
중심 엔터티: 기본 엔터티로부터 파생, 행위 엔터티 생성
행위 엔터티: 2개 이상의 엔터티로부터 파생
속성(Attribute)
사물이나 개념의 특징을 설명해줄 수 있는 항목
더이상 쪼개지지 않는 레벨이어야 하고 프로세스에 필요한 항목이어야 한다
속성값
엔터티에 속한 하나의 인스턴스를 구체적으로 나타내줌(속성: 이름, 속성값: 김채원)
엔터티, 인스턴스, 속성, 속성값의 관계
한 개의 엔터티는 두 개 이상의 인스턴스를 갖는다
한 개의 인스턴스는 두 개 이상의 속성을 갖는다
한 개의 속성은 한 개의 속성값을 갖는다
분류
- 특성에 따른 분류
기본속성: 업무 프로세스 분석을 통해 바로 정의 가능한 속성(대부분)
설계속성: 업무에 존재하지는 않지만 설계하다보니 필요하다고 판단되어 도출한 속성
파생속성: 다른 속성의 속성값을 계산하거나 특정한 규칙으로 변형하여 생성한 속성
- 구성방식에 따른 분류
PK(Primary Key)속성: 엔터티의 인스턴스들을 식별할 수 있는 속성
FK(Foreign Key)속성: 다른 엔터티의 속성에서 가져온 속성
일반속성: PK, FK 를 제외한 나머지 속성
도메인
속성이 가질 수 있는 속성값의 범위
관계(Relationship)
엔터티와 엔터티의 관계
- 존재 관계: 존재 자체로 연관성이 있는 관계
- 행위 관계: 특정 행위를 함으로써 연관성이 생기는 관계
표기법
- 관계명: 엔터티와 엔터티의 관계를 나타내는 문장
- 관계차수: 각 엔터티에서 관계에 참여하는 수(1:1, 1:N, M:N)
- 관계선택사양: 관계가 필수요소인지 선택사항인지 나타냄(필수적 관계, 선택적 관계)
식별자(Identifiers)
속성 중 각각의 인스턴스를 구분 가능하게 만들어주는 대표 격인 속성
주식별자
기본키, PK에 해당하는 속성
유일성, 최소성, 불변성, 존재성 만족
분류
- 대표성 여부
주식별자: 유일성, 최소성, 불변성, 존재성을 가진 대표 식별자, 다른 엔터티와 참조 관계로 연결
보조식별자: 인스턴스를 식별할 수 있지만 대표 식별자는 아님, 다른 엔터티와 참조 관계 X
- 스스로 생성되었는지 여부
내부식별자: 엔터티 내부에서 스스로 생성
외부식별자: 다른 엔터티에서 온 식별자, 다른 엔터티와 연결고리 역할
- 단일 속성의 여부
단일식별자: 하나의 속성으로 구성
복합식별자: 두 개 이상의 속성으로 구성
- 대체 여부
원조식별자: 업무 프로세스에 존재하는 식별자, 가공되지 않은 원래의 식별자(본질식별자)
대리식별자: 주식별자 속성이 두 개 이상인 경우 그 속성들을 하나로 묶어 사용(인조식별자)
식별자 관계 vs. 비식별자 관계
식별자 관계: 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 되는 관계. 주식별자는 반드시 존재해야 하므로 부모 엔터티가 있어야 생성 가능, 단일식별자인지 복합식별자인지 여부에 따라 1:1, 1:M 등 결정
비식별자 관계: 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 아닌 일반 속성. 일반 속성값은 NULL이 될 수 있으므로 부모 엔터티 없는 자식 엔터티 생성 가능. 자식 엔터티 존재하는 상황에서 부모 엔터티 삭제 가능
데이터 모델과 SQL
정규화
데이터의 정합성을 위해 엔터티를 작은 단위로 분리하는 과정
과도한 정규화로 성능 저하를 일으키지 않도록 적절히 정규화
제1정규형
모든 속성은 반드시 하나의 값만 가져야 한다
CUD 성능은 증가하나 R 성능은 줄어들 수도 있음
제2정규형
엔터티의 모든 일반 속성은 반드시 모든 주식별자에 종속되어야 한다
주식별자가 복합식별자일 경우 일반속성이 주식별자의 일부에만 종속되어 문제 발생
제3정규형
주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다
일반 속성이 다른 일반 속성에 종속되지 않도록 엔터티를 분리해야 함
반정규화
데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정
정규화가 끝난 후 실시, 데이터 정합성 이슈 발생 가능
테이블 반정규화
- 테이블 병합
1:1 관계 테이블 병합
1:M 관계 테이블 병합
슈퍼 서브 타입 테이블 병합
- 테이블 분할
테이블 수직 분할(속성 분할)
테이블 수평 분할(인스턴스 분할, 파티셔닝)
- 테이블 추가
중복 테이블 추가, 통계 테이블 추가, 이력 테이블 추가, 부분 테이블 추가
컬럼 반정규화
- 중복 컬럼 추가: 업무 프로세스상 컬럼 추가가 성능 측면에서 유리할 경우 고려
- 파생 컬럼 추가: 부하가 우려되는 계산값을 미리 컬럼으로 추가
- 이력 테이블 컬럼 추가: 대량의 이력 테이블 조회 시 속도 저하를 대비하여 조회 기준이 될 것으로 판단되는 컬럼 미리 추가
관계 반정규화(중복관계 추가)
업무 프로세스상 관계 추가가 성능 측면에서 유리할 경우 고려
트랜잭션
데이터를 조작하기 위한 하나의 논리적인 작업 단위
NULL
존재하지 않음, 값이 없음
참고자료: 2022 유선배 SQL개발자(SQLD) 과외노트
http://www.yes24.com/Product/Goods/115027455
2023 유선배 SQL개발자(SQLD) 과외노트 - YES24
SQL Server 분야 베스트 1위!핵심만 쏙쏙 담은 알찬 수험서! SD에듀가 가장 효율적·효과적인 합격의 길을 제안합니다.유튜브 선생님에게 배우는 유·선·배, 『유선배 SQL개발자 과외노트』와 함께 20
www.yes24.com