[SQLD] 1. 데이터 모델링의 이해
SQLD를 취득하기 위해 공부하는 과정에 작성한 ‘데이터 모델링의 이해’ 관련 정리이다.
데이터 모델링의 이해
데이터 모델의 이해
- 모델링 (
Modeling) : 현실에서 반영할 데이터를 저장할 데이터베이스를 구축하기 위한 분석·설계의 과정- 모델링 조건 : 현실 세계를 반영해야 함, 단순화하여 표현해야 함, 관리하고자 하는 데이터를 모델로 설계
- 모델링 특징 : ‘현실 세계를 추상화, 단순화, 명확화하기 위해 일정한 표기법에 의해 표현하는 기법’
- 추상화 (
Abstraction) : 현실 세계의 아이디어나 개념을 일정한 형식으로 간략하게 표현하는 것 - 단순화 (
Simplification) : 복잡한 현실 세계를 정해진 표기법으로 단순하고 쉽게 표현하는 것 - 명확화 (
Clarify) : 불분명함을 제거하고 명확하게 해석할 수 있도록 기술하는 것
- 추상화 (
- 모델링의 3가지 관점 : 데이터 관점 , 프로세스 관점, 데이터·프로세스의 상관 관점
- 데이터 모델링 유의점 : 중복 (같은 데이터가 여러 엔티티에 중복으로 저장되는 것은 지양되어야), 비유연성 (데이터 모델은 수시로 변경되므로, 데이터 모델과 프로세스를 분리해야), 비일관성 (데이터 간 연관 관계에 대해 명확히 정의해야)
- 모델링 3단계 : 개념적 데이터 모델링, 논리적 데이터 모델링, 물리적 데이터 모델링
- 데이터 독립성 : 데이터베이스에 대한 사용자들의 관점과 실제 표현되는 물리적인 방식 분리
- 3단계 스키마 구조 : 논리적 독립성, 개념적 독립성이 보장
- 외부 스키마 (
External Schema) : 각 사용자가 보는 데이터베이스의 스키마 정의 → 사용자 관점 - 개념 스키마 (
Conceptual Schema) : 모든 사용자가 보는 데이터베이스의 스키마 통합 → 통합 관점 - 내부 스키마 (
Internal Schema) : 물리적 저장 구조를 표현 → 물리적 관점
- 외부 스키마 (
ERD(Entity Relation Diagram) : 시스템에 어떤 엔티티가 존재하고, 그들 간 어떤 관계를 표현하는 다이어그램
엔티티
- 엔티티 (
Entity) : 데이터베이스에서 식별 가능한 객체- 엔티티 특징 : 업무에서 쓰이는 정보이면서 업무 프로세스에 의해 이용되어야 함, 유니크함을 보장할 수 있는 식별자가 있어야 함, 영속적으로 존재하는 2개 이상의 인스턴스의 집합이여야 함, 반드시 속성을 가져야 함, 다른 엔티티와 1개 이상의 관계를 가지고 있어야 함
- 엔티티 분류 : 유형 엔티티 (물리적 형태 존재, 안정적, 지속적), 개념 엔티티 (물리적 형태 없음, 개념적), 사건 엔티티 (행위를 함으로 발생, 빈번함, 통계 자료로 이용 가능)
- 엔티티 발생 시점 : 기본 엔티티 (업무에 원래 존재하는 정보), 중심 엔티티 (기본 엔티티에서 파새오디어 행위 엔티티 생성), 행위 엔티티 (2개 이상의 엔티티로부터 파생)
속성
- 속성 (
Attribute) : 사람·사물을 정의할 때 사물이나 개념의 특징을 설명해줄 수 있는 항목- 속성 특징 : 더 이상 쪼개지지 않는 레벨, 프로세스에 필요한 항목이여야 함
- 속성값 : 엔티티에 속한 하나의 인스턴스를 구체적으로 나타내주는 데이터
- 엔티티, 인스턴스, 속성, 속성값의 관계 : 속성 ⊂ 인스턴스 ⊂ 엔티티
- 1개의 엔티티는 2개 이상의 인스턴스를 갖는다.
- 1개의 인스턴스는 2개 이상의 속성을 갖는다.
- 1개의 속성은 1개의 속성값을 갖는다.
- 특성에 따른 속성 분류 : 기본 속성 (업무 프로세스 분석을 통해 바로 정의 가능한 속성), 설계 속성 (업무에 존재하지 않지만 설계할 때 도출된 속성), 파생 속성 (다른 속성의 속성값을 계산하거나 특정 규칙으로 변환되어 생성한 속성)
- 구성 방식에 따른 속성 분류 :
PK(엔티티의 인스턴스를 식별할 수 있는 속성),FK(다른 엔티티의 속성에서 가져온 속성), 일반 속성 (PK,FK를 제외한 나머지 속성) - 도메인 (
Domain) : 속성이 가질 수 있는 속성값의 범위 - 용어사전 : 속성의 이름을 직관적으로 부여하기 위한 업무사전
- 시스템 카탈로그 : 시스템 자체에 관련이 있는 데이터를 담고 있는 데이터베이스 (읽기 연산만 가능)
관계
- 관계 (
Relation) : 엔티티와 엔티티와의 관계- 존재 관계 : 존재 자체로 연관성이 있는 관계
- 행위 관계 : 특정한 행위를 함으로써 연관성이 생기는 관계
- 관계 표기법 : 관계명 (엔티티와 엔티티가 어떤 관계를 맺고 있는지 나타내는 문장), 관계차수 (
1:1,1:N,N:N와 같이 각 엔티티에서 관계에 참여하는 수), 관계선택사양 (이 관계가 필수요소인지 선택사항인지 나타내는 말)
식별자
- 식별자 (
Identifier) : 속성 중에 각각의 인스턴스를 구분 가능하게 하는 속성 -
식별자 분류 : 대표성 여부 (주식별자
vs보조 식별자), 소스로 생성되었는지 여부 (내부식별자vs외부식별자), 단일 속성 여부 (단일식별자vs복합식별자), 대체 여부 (원조식별자vs대리식별자) - 주식별자 :
PK→ 하나의 속성이 주식별자가 될 수 있고, 여러 개의 속성이 주식별자가 될 수 있음 - 주식별자 특징 : 유일성 (각 인스턴스에 유니크함을 부여하여 식별이 가능하도록 함), 최소성 (유일성을 보장하는 최소 개수의 속성이여아 함), 불변성 (속성값이 되도록 변하지 않아아 함), 존재성 (속성값이
NULL일 수 없음)
데이터 모델과 SQL
정규화
- 정규화 (
Normalization) : 데이터 정합성을 위해 엔티티를 작은 단위로 분리하는 과정- 제1정규형 : 모든 속성은 반드시 하나의 값만 가져야 함
- 제2정규형 : 엔티티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 함
- 제3졍규형 : 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없음
반정규화
- 반정규화 (
De-Normalization) : 데이터의 조회 성능 향상을 위해 데이터 중복을 허용하거나 데이터를 그룹핑- 테이블 반졍규화 : 테이블 병합 (
JOIN이 많아 테이블 통합,1:M은 지양해야), 테이블 분할 (엔티티 일부 속성을1:1의 엔티티로 만드는 테이블 수직 분할, 엔티티 인스턴스를 특정 기준으로 파티셔닝하는 테이블 수평 분할), 테이블 추가 (별도의 중복된 엔티티를 추가하는 중복 테이블 추가, 통계 테이블·이력 테이블·부분 테이블 추가) - 컬럼 반정규화 : 중복 칼럼 추가 (
JOIN이 많아 컬럼 통합), 파생 칼럼 추가 (계산값을 미리 컬럼으로 보관), 이력 테이블 컬럼 추가 (조회 기준이 될 컬럼을 미리 추가) - 관계 반정규화 :
JOIN이 많아 중복 관계 추가
- 테이블 반졍규화 : 테이블 병합 (
트랜잭션
- 트랜잭션 (
Transaction) : 데이터를 조작하기 위한 하나의 논리 작업 다위 - 널 (
NULL) : 존재하지 않음, 값이 없음
데이터베이스
관계형 테이터베이스
- 데이터베이스 (
Database) : 데이터를 저장하는 공간- 관계형 데이터베이스 (
RDB; Relational Database) : 관계형 데이터 모델에 기초한 데이터베이스 (모든 데이터를 2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의) - 테이블 (
Table) : 세로 열인 컬럼 (Column)과 가로 행인 로우 (Row)로 구성
- 관계형 데이터베이스 (
SQL: 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어