코드배정
[SQLD Study Log] 1 과목. 데이터 모델링의 이해 본문
이번 글은 SQLD 시험 준비 과정에서 학습했던 1과목, 데이터 모델링의 이해를 정리한 글이다.
특히 나는 홍쌤의 데이터랩 강의 교재를 기반으로 공부했으며, 교재 내용을 그대로 옮기기보다는 내가 이해한 방식대로 재구성했다.
개념을 설명만 하기 보다는, 시험에서 자주 출제되었던 포인트와 실무에서의 활용 가능성까지 함께 기록하려 한다.
1. 데이터 모델링이란?
- 모델링 : 현실세계의 데이터를 요구사항에 따라, 특정 표기법으로 구조, 속성, 관계 등을 시각적으로 표현하는 과정.
- 모델링의 3가지 특징 : 단순화(Simplication), 추상화(Abstraction), 명확화(Clarity)
- 데이터 모델링의 3가지 관점
- 데이터 관점 : 데이터 모델링의 가장 기본적인 관점.
- 프로세스 관점 : 데이터를 어떻게 활용(처리) 할 것인가를 보는 관점.
- 데이터와 프로세스 관점 : 정의된 데이터와 프로세스를 실제 DBMS 상에 구현하는 관점.
- 데이터 모델링시 유의할 점 : 중복(Duplication), 비유연성(Inflexibility), 비일관성(Inconsistency)
- 데이터 모델링의 3가지 요소 : 대상(Entity), 속성(Attribute), 관계(Relationship)
- 데이터 모델링의 3단계
- 개념적 모델링 : 업무 관점에서 데이터의 큰 틀을 정의하는 단계.
- 논리적 모델링 : 개념적 모델을 DBMS에 맞게 구체화하는 단계.
- 물리적 모델링 : 논리적 모델을 실제 DBMS에 구현 가능한 형태로 변환하는 단계.
추상화 수준은 개념적 모델링이 가장 높고, 물리적 모델링이 가장 낮음
- 스키마의 3단계
스키마란? 데이터베이스의 구조와 제약조건을 정의한 명세(Specification).
(논리적 모델링 단계에서 주로 고려한다.)
- 외부 스키마 : 개별 사용자나 응용 프로그램이 필요로 하는 뷰(View)를 정의.
- 개념 스키마 : 전체 데이터베이스의 논리적 구조를 정의.
- 내부 스키마 : 실제 데이터가 DBMS 내부에서 어떻게 저장되는지의 물리적 저장 구조를 정의.
간단하게 정리하면,
외부 스키마 : 개인 관점
개념 스키마 : 조직 관점
내부 스키마 : 데이터베이스 관점
* 스키마의 독립성 2가지
1) 논리적 독립성 : 개념 스키마 ↔ 외부 스키마 사이의 독립성.
개념 스키마가 변경되어도, 외부 스키마 는 영향을 받지 않도록 하는 특성.
2) 물리적 독립성 : 내부 스키마 ↔ 개념 스키마 사이의 독립성.
내부 스키마가 변경되어도, 개념 스키마는 영향을 받지 않도록 하는 것.
- ERD(Entity Relationship Diagram) : 엔터티(Entity) 와 엔터티 간의 관계(Relationship)를 표현한 다이어그램
2. 엔터티(Entity)란?
- 엔터티(Entity) : 현실 세계에서 식별 가능한 대상. (식당 입장에서는 요리사와 손님이 엔터티로 볼 수 있다.)
* 엔터티는 명명시 약어 사용은 자제하고 단수 명사를 사용한다.
- 엔터티의 특징
- 주식별자에 의해 식별 가능하다.
- 2개 이상의 인스턴스를 포함한다.
- 2개 이상의 속성을 가진다.
- 다른 엔터티와 꼭 1개 이상의 관계를 가진다.
- 엔터티의 분류
- 형태에 따라, 유형엔터티, 개념엔터티, 사건엔터티 (유개사 로 암기.)
- 발생에 따라, 기본엔터티, 중심엔터티, 행위엔터티 (기중행 으로 암기.)
3. 속성(Attribute)이란?
- 속성 : 업무에서 필수로 요구되는 성질, 특징. (식당 입장에서는 요리사의 고유번호를 속성으로 볼 수 있다.)
* 속성은 업무상 인스턴스로 관리하려는 최소의 데이터 단위이다.
* 인스턴스 : 엔터티에 속하는 구체적인 하나의 값. (테이블에서 하나의 행이다.)
* 속성은 명명시 서술식 속성명 사용하지 않고, 약어 사용은 제한한다.
- 속성의 특징
속성은 주식별자에 의해 함수적 종속성을 가진다.
원자성을 가진다. (원자성 : 한 속성에는 하나의 값만 들어가야 하는 것을 의미한다.)
- 함수적 종속성 2가지
- 완전 함수적 종속 : 주식별자 전체에 의해서만 나머지 속성들을 유일하게 결정할 수 있는 때를 말한다.
- 부분 함수적 종속 : 주식별자 중 일부에 의해서도 나머지 속성들을 유일하게 결정할 수 있는 때를 말한다.
- 속성의 분류
- 속성의 특성에 따라, 기본 속성, 설계 속성, 파생 속성 (기설파 로 암기.)
- 엔터티 구성방식에 따라, PK(Primary Key, 기본키), FK(Foreign Key, 외래키), 일반 속성
- 분해 여부에 따라, 단일 속성, 복합 속성, 다중값 속성
- 도메인 : 속성의 값이 가질 수 있는 값의 범위.
4. 관계(Relationship)란?
- 관계 : 두 엔터티 사이의 연관성.
ex. 요리사 엔터티가 손님 엔터티에게 요리를 제공하므로, 두 엔터티 사이에 관계가 존재한다.
- 관계의 종류
- 존재적 관계 : 한 엔터티의 존재가 다른 엔터티의 존재에 의존하는 관계.
(요리사 엔터티 삭제시, 메뉴 엔터티가 존재 불가.)
- 행위적 관계 : 한 엔터티에 의해서 또 다른 엔터티가 생성되는 관계.
(손님 엔터티에 의해서 주문 엔터티가 발생한다.)
- 관계의 구성 : 관계명, 차수(Cardinality), 선택성(Optionality)
- 관계의 차수 : 한 엔터티의 인스턴스가 다른 엔터티의 인스턴스와 어떤 형태의 관계를 갖는지의 표현 방법.
- 1 대 1 관계 완전 1 대 1 관계 : 두 엔터티가 반드시 연결되어야 하는 관계.
(주민등록증은 반드시 한 개인에게 속하고, 개인도 반드시 주민등록증을 가진다.)
부분 1 대 1 관계 : 한 엔터티는 상대 엔터티가 없을 수도 있고, 있다면 하나와만 연결되는 관계.
(사원은 하나의 부서에 속할 수도 있고, 없을수도 있다.)
- 1 대 N 관계 : 한 엔터티의 인스턴스가 다른 엔터티의 여러 인스턴스와 연결될 수 있는 관계.
(부서는 여러 사원을 가질 수 있지만, 각 사원은 하나의 부서에만 속한다.)
- N 대 M 관계 : 한 엔터티의 여러 인스턴스가 다른 엔터티의 여러 인스턴스와 동시에 연결될 수 있는 관계.
(학생은 여러 과목을 수강할 수 있고, 한 과목도 여러 학생이 수강할 수 있다.)
- 관계의 페어링 : 두 엔터티 사이에서 각 인스턴스들이 어떻게 매칭되는지를 나타내는 것.
관계의 페어링은 관계의 차수를 세부적으로 설명한다.
5. 식별자(Identifier)란?
- 식별자 : 엔터티의 인스턴스를 서로 구별할 수 있게 해주는 속성 (또는 속성의 집합).
* 논리적 모델링에서는 식별자 라고 하고, 물리적 모델링에서는 키(key) 라고 한다.
- 주식별자의 특징
- 주식별자 : 엔터티의 인스턴스를 유일하게 식별할 수 있는 대표 속성(또는 속성 집합)
물리적 모델링 단계에서는, 기본키(Primary Key)라고 한다.
- 주식별자의 특징으로는 유일성, 최소성, 불변성, 존재성이 있다.
- 식별자 분류
- 대표성에 따라, 주식별자와 보조식별자로 구분.
- 생성 여부에 따라, 내부식별자와 외부식별자로 구분.
- 속성 수에 따라, 단일식별자와 복합식별자로 구분.
- 대체 여부에 따라, 본질식별자(원조식별자)와 인조식별자로 구분.
* 본질식별자와 인조식별자는 어느 위치에서 쓰이냐에 따라, 주의 필요.
예를 들어,
상품구매 로직에서 주문목록 엔터티에는 구매번호가 굳이 필요하지 않다.
대신 상품 발송을 위해 주소, 상품명 등을 조합해서 구매번호라는 인조식별자를 둔다.
하지만 상품배송 엔터티에서는 구매번호가 반드시 필요하므로, 여기서는 구매번호가 본질식별자 역할을 한다.
- 관계간 엔터티 구분
- 강한 개체 : 독립적으로 존재 가능한 엔터티.
ex. 손님 엔터티는 주문 엔터티 없이도 독립적으로 존재 가능하다.
- 약한 개체 : 독립적으로 존재 불가능한 엔터티.
ex. 주문 엔터티는 손님 엔터티에 의해 파생되므로 독립적으로는 존재 불가하다.
- 식별 관계와 비식별 관계
- 식별 관계 : 자식 엔터티가 부모 엔터티의 주식별자를 자신의 주식별자에 포함하는 관계.
ERD에서는 실선으로 표현.
- 비식별 관계 : 자식 엔터티가 부모 엔터티의 주식별자를 자신의 일반속성으로만 가져오는 관계
ERD에서는 점선으로 표현.
- Key의 종류
- 기본키(Primary Key) : 엔터티의 인스턴스를 유일하게 식별할 수 있는 대표 키.
- 후보키(Candidate Key) : 엔터티의 인스턴스를 유일하게 식별할 수 있는 속성들의 집합. (유일성 + 최소성)
- 슈퍼키(Super Key) : 유일성은 만족하지만, 최소성은 만족하지 않는 키.
- 대체키(Alternate Key) : 후보키 중에서 기본키로 선택되지 않은 나머지 키.
- 외래키(Foreign Key) : 다른 엔터티(테이블)의 기본키를 참조하는 키.
6. 정규화(Normalization)란?
- 정규화 : 데이터의 중복 최소화와 이상 현상 방지를 위해, 엔터티의 속성을 분해하여 더 작은 단위의 엔터티로 나누는 과정.
* 이상현상(Abnormality) : 정규화를 하지 않아서 발생하는 현상으로,
삽입 이상 (새 데이터 입력 불가), 삭제 이상 (원치 않는 데이터 손실), 갱신 이상 (데이터 불일치 발생) 이 있다.
- 정규화 단계
- 제 1 정규화 : 테이블의 컬럼이 원자성을 갖도록 분해.
- 제 2 정규화 : 제 1 정규화를 거친 테이블에 대해, 완전 함수 종속성을 갖도록 분해.
- 제 3 정규화 : 제 2 정규화를 거친 테이블에 대해, 이행적 종속을 제거하도록 분해.
* 이행적 종속 : A 속성이 B 속성의 값을 결정할 때, B 속성이 C 속성을 결정할 수 있다면,
A 속성에 의해 C 속성이 결정되는 것
- BCNF(Boyce-Codd Normal Form) 정규화 : 제 3 정규화를 거친 테이블에 대해,
모든 결정자가 후보키가 되도록 분해.
- 제 4 정규화 : 제 3 정규화 (또는 BCNF 정규화)를 거친 테이블에 대해,
하나의 키가 서로 독립적인 여러 다중값 속성을 동시에 결정하는 것을 방지하도록 분해.
- 제 5 정규화 : 제 4 정규화를 거친 테이블에 대해,
테이블을 분해했다가 다시 조인했을 때 원래 테이블을 정확히 복원할 수 있도록 분해.
* 반정규화(De-Normalization) : 정규화된 데이터 모델에서 조회 성능 향상이나 개발 편의성을 위해
의도적으로 데이터 중복을 허용하거나 자주 조인되는 테이블을 합치는 과정.
7. 관계와 조인의 이해
- 관계 : 테이블의 인스턴스가 어떻게 연관되는지를 나타낸다.
- 관계의 분류 : 존재 관계, 행위 관계.
- 조인 : 분리되어 있는 테이블을 데이터를 연결해서 보여준다.
- 계층형 데이터 모델 : 하나의 테이블 안에서 인스턴스끼리 서로 관계를 가져서 조인시, 자기자신 테이블을 참조하는 모델.
- 상호배타적 관계 : 두 테이블 중 하나의 테이블만 참여할 수 있는 관계.
ex. 결제에 있어서, 법인과 개인 둘 중 하나만이 참여 가능.
8. 트랜잭션(Transaction)이란?
- 트랜잭션 : 분할할 수 없는 하나의 업무 단위.
- 특징 : 모두 성공하거나 모두 취소되어야 한다.
* 예를 들어, 은행 송금을 생각해보면, A 은행의 계좌에서 B 은행의 계좌로 송금을 하려면
A 은행 계좌에서는 송금 금액만큼 잔액이 줄어들고, B 은행 계좌에서는 잔액이 송금 금액만큼 늘어나야 하는데,
이 잔액 감소와 증가 과정은 동시에 이뤄져야 한다.
* 부분 COMMIT이 불가능하기 때문에, 동시에 COMMIT 하거나 모두 ROLLBACK 한다.
9. NULL 속성이란?
- NULL : DBMS 상에서 아직 정해지지 않은 값이라는 의미로 사용하며, 0 이나 빈문자열('')과는 다르다.
- 특징 : NULL을 포함한 연산의 결과는 NULL, 그룹함수 연산 시 NULL은 제외하고 연산 수행한다.
10. 본질식별자와 인조식별자
- 본질식별자 : 업무에 의해서 만들어지는 식별자 (필수)
- 인조식별자 : 본질식별자가 복잡하거나 사용이 어려운 경우, 업무의 효율성 위해서 인위적으로 만드는 식별자
- 인조식별자의 단점 : 중복 데이터나 불필요한 인덱스가 생길 수 있다.
1과목 시험 후기.
58회 SQLD 시험의 경우, 주로 개념이나 정의, 분류 등을 물어봤던 이전과는 다르게, ERD 관련 문제가 상당히 출제되었다. 단순히, 글로만 개념을 익힌다면, ERD를 해석하는데 꽤 시간이 소요될 것이다. 이번 시험을 봤을 때, 앞으로 1과목에서는 점점 ERD 해석 능력이 중요해질 것으로 보인다. 시험 대비를 위해, 특별히 관계와 식별자 부분의 내용을 잘 숙지하며, 동시에 ERD 해석 문제를 많이 풀어보면서 해석하는 능력을 기르는 것이 도움이 될 것으로 보인다.
실무에서도 ERD 해석 능력은 단순히 시험 대비를 넘어서 필수적인 역량이다.
ERD를 통해 테이블 간 관계를 직관적으로 파악하면, 복잡한 JOIN 쿼리를 작성할 때 훨씬 정확하고 빠르게 작성할 수 있다.
또한, 식별자 관계를 이해하지 못하면 중복 데이터 발생, 불필요한 인덱스 증가 같은 문제가 생겨 데이터 품질이 떨어진다.
이외에도 ERD 해석 능력은 여러 부분에 활용된다.
따라서, ERD는 시험준비를 위해서만 공부하는 것이 아니라, 실무를 위해서도 잘 숙지하는 것이 중요하다.
'SQL' 카테고리의 다른 글
| [SQLD Study Log] 2 과목. SQL 기본과 활용 (2) | 2026.01.15 |
|---|---|
| ERD(Entity Relationship Diagram) 란? (0) | 2025.09.30 |