본문 바로가기

자격증/SQLD

[SQLD][아답터] 1과목 - 데이터 모델

반응형
[데이터 모델]

1. 데이터 모델의 이해

1-1. 모델링
1-1-1. 특징
1-1-2. 유의사항
1-1-3. 관점

1-2. 데이터베이스의 모델링 단계
1-2-1. 개념적 모델링
1-2-2. 논리적 모델링
1-2-3. 물리적 모델링

1-3. ERD
1-3-1. ERD 작성 순서

1-4. ANSI / SPARC 스키마 구조
1-4-1. 스키마의 3계층
1-4-2. 독립성

1-5. 데이터 모델의 구성요소 : 엔터티 (Entity)
1-5-1. 엔터티의 분류

1-6. 데이터 모델의 구성요소 : 속성 (Attribute)
1-6-1. 속성의 분류
1-6-2. 도메인

1-7. 데이터 모델의 구성요소 : 관계 (Relationship)
1-7-1. 관계의 구성
1-7-2. 교차 엔터티
1-7-3. 관계 체크사항

1-8. 식별자
1-8-1. 식별자의 분류
1-8-2. 식별자 관계와 비식별자 관계
1-8-3. 키(Key)

2. 데이터 모델과 SQL

2-1. 정규화
2-1-1. 이상현상
2-2-2. 함수적 종속
2-2-3. 정규화 단계

2-2. 관계와 조인의 이해
2-2-1. 조인
2-2-2. 계층형 데이터 모델
2-2-3. 상호배타적 관계

2-3. 모델이 표현하는 트랜잭션의 이해
2-3-1. 트랜잭션
2-3-2. 트랜잭션의 4대 특성 (ACID)
2-3-3. 트랜잭션의 격리 수준에 따른 문제점

2-4. Null 속성의 이해
2-4-1. Null의 개념
2-4-2. Null의 표기

2-5. 본질식별자와 인조식별자
2-5-1. 본질식별자와 인조식별자의 개념
2-5-2. 인조식별자의 장단점

 

1. 데이터 모델의 이해

1-1. 모델링

현실 세계의 정보를 약속된 표기법을 활용하여 데이터베이스의 구조로  표현하는 과정

 

📝 예시로 이해하기

학교에는 학생들이 있고, 학생들은 과목을 수강한다.
그리고 이러한 정보들을 데이터베이스에 저장하게 되는데, 이 때 저장을 위한 구조를 표현하는 과정을 모델링이라고 한다.

💡 즉, 현실 세계의 정보를 데이터베이스에 저장하기 위한 구조를 표현하는 과정이 모델링이라는 것이다.

1️⃣ 특징

🔹 단순화 : 누구나 쉽게 이해 가능 ➜ 단순해야 함

🔹 추상화 : 주요 특징을 간략하게 표현

🔹 명확화 : 모호하게 표현되지 않음 ➜ 컴퓨터에 저장이 되어야 하기 때문에

✔️  "단추명"으로 암기

2️⃣ 유의사항

🔹 유연성 : 변화에 유연한 대응 ➜ 학생이 추가되거나 이름이 변경되는 등의 변화에 유연하게 대응해야 함

🔹 유일성 : 중복 저장 X ➜ 동일한 학생이나 과목이 있으면 안됨

🔹 일관성 : 명확한 관계 ➜ 학생과 과목 간에 수강이라는 명확한 관계가  필요

3️⃣ 관점

🔹 데이터 관점 : 학생, 과목 등을 각각의 데이터로 바라보는 관점

🔹 프로세스 관점 : 업무 흐름 ➜ 학생이 과목을 수강한다. 라는 흐름의 관점

🔹 데이터와 프로세스의 상관 관점 ➜ 데이터와 프로세스를 동시에 바라보는 관점 ( CRUD 분석 기반 )

※ CRUD : Create, Read, Update, Delete

1-2. 데이터베이스의 모델링 단계

개념적 모델링 ➜ 논리적 모델링 ➜ 물리적 모델링

✔️  "개논물"로 암기

1️⃣ 개념적 모델링

🔹 현실 세계에 대한 인식을 추상적 개념으로 표현

🔹 ERD를 작성

※ ERD : 추상적 개념으로 표현하기 위한 "약속된" 표현법

2️⃣ 논리적 모델링

🔹 논리적 자료구조로 변환하며 정규화를 사용

※ 논리적 자료구조 : 행과 열, 테이블의 형태로 만드는 것

🔹 재사용성이 높음

3️⃣ 물리적 모델링

🔹 물리적 구조의 데이터로 변환

✔️  물리적 모델링으로 갈수록 높은 수준의 구체화(낮은 수준의 추상화) 레벨을 가짐

 

⭐  데이터 모델의 필수 구성요소 : 엔터티(Entity), 속성(Attribute), 관계(Relatitionship)

 

1-3. ERD

피터 첸(Peter Chen)에 의해 ERD 표기법이 고안됨 (IE 표기법, Barker 표기법 )

 

1️⃣ ERD 작성 순서

🔹엔터티 도출 ➜ 배치 ➜ 관계 설정 ➜ 관계명 기술 ➜ 관계 차수 기술 ➜ 필수여부 기술

-  엔터티 : 학생, 수강 등

-  배치 : 중요한 정보는 왼쪽 상단에 기술

✔️  "도배설명차필" 로 암기 (도배를 설명할 떄는 차가 필요하다)

1-4. ANSI / SPARC 스키마

스키마란 DB의 설계도를 의미한다.

1️⃣ 스키마의 3계층

🔹 외부 스키마 (=서브 스키마, 사용자 뷰)

-  사용자의 입장에서 여러 개의 외부 스키마가 존재함

📝 예시로 이해하기

입출금을 하기 위해 어플, ATM기, 은행 방문 등의 여러 방법을 사용하듯 스키마에도 여러 가지의 외부 스키마가 존재한다.

 

🔹 개념 스키마

-  여러 개의 외부 스키마는 하나의 전체적인 구조에 의해서 구성된다.

-  DB 관리자에 의해 구성된다.

 

🔹 내부 스키마

- 개념스키마가 저장되는 물리적인 위치

- 물리적 저장장치 입장에서의 구조

2️⃣ 독립성

🔹 논리적 독립성

- 개념 스키마가 변경되어도 외부 스키마에는 영향이 없어야 함

📝 예시로 이해하기

입출금 시스템이 A 은행에서만 작업되다가, B 은행에서도 작업되도록 변경이 될 경우에도, 사용자에게는 영향이 없어야 한다.

 

🔹 물리적 독립성

- 내부 스키마가 변경되어도 개념 / 외부 스키마에는 영향이 없어야 함

📝 예시로 이해하기

물리적 저장장치가 노화되거나 확장해야 해서 내부 스키마가 변경이 될 경우에도 개념 / 외부 스키마에는 영향이 없어야 한다.

1-5. 데이터 모델의 구성 요소 : 엔터티 (Entity)

현실 세계에 존재하며 명확하게 구분 가능한 존재를 엔터티라 부름

➜ ex) 학생, 과목, 수강, 고객, 상품 등

 

 

🔹 특징

- 유일한 식별자를 보유해야 함 (예 : 반장, 학번 등)

- 인스턴스가 2개 이상인 집합 ➜ 데이터가 2개 이상이어야 함

- 2개 이상의 속성을 보유해야 함  (예 : 생년월일, 학번 등)

- 다른 엔터티와의 관계가 필수적입 (예 : 학생은 수강 / 과목 등과 관계가 연결이 되어야 함)

 

🔹 명명법

- 현업에서 사용하는 용어

- 약어 사용 지양

- 단수 명사

- 중복 없음

- 의미 명확

1️⃣ 엔터티의 분류

🔹 유무형에 따른 분류

- 유형 엔터티 : 물리적 형태가 존재함 (예 : 학생, 책, 고객)

- 개념 엔터티 : 형태는 없지만 개념적으로 구분 (예 : 과목, 학과, 부서)

- 사건 엔터티 : 특정 시점에 발생한 사건 (예 : 수강, 주문, 예약)

✔️ "개사유"로 암기

 

🔹 발생 시점에 따른 분류

- 기본 엔터티 : 다른 엔터티에 영향을 받지 않고 독립적으로 존재 (예 : 학생, 과목, 고객, 직원 등)

- 중심 엔터티 : 기본 엔터티와 행위 엔터티를 연결함 (예 : 수강신청, 주문 등)

※ 중심 엔터티는 독립적으로 존재할 수 없음

- 행위 엔터티 : 두 개 이상의 엔터티를 상속받아 생성되는 행위 (예 : 수강, 주문내역 등)

※ 행동이기 때문에 수정 사항이 많음

✔️  "기행중" 으로 암기 (기이한 행동을 하는 중)

1-6. 데이터 모델의 구성 요소 : 속성 (Attribute)

더 이상 분리되지 않는 최소의 데이터 단위 (원자성)

 

📝 예시로 이해하기

A 라는 학생이 수학도 듣고 과학도 듣는 경우

 

❌ 잘못된 저장 방식

A 수학, 과학

 

⭕ 올바른 저장 방식

A 수학
A 과학

 

💡 더 이상 분리되지 않도록 저장해야 한다.

 

🔹 특징

- 엔터티는 속성의 집합

- 1개의 속성은 1개의 속성 값

- 주식별자에 함수적 종속

※ 함수적 종속 : A 속성에 의해 B가 유일하게 결정됨

📝 예시로 이해하기

학번이라는 A 속성에 의해서 이름이라는 B 속성이 유일하게 결정되어야 한다.

- 업무에서 관리되는 정보

 

🔹 명명법

- 업무에 사용되는 명칭 사용

- 서술식 표현 금지

- 약어 사용 지양

- 유일성 (중복 X)

 

1️⃣ 속성의 분류

🔹 특성에 따른 분류

- 기본 속성 : 본래 가지고 있는 속성 (예 : 이름, 학번, 고객ID)

- 설계 속성 : 필요로 인하여 도출된 속성 (예 : 주문번호, 일련번호)

- 파생 속성 : 변형되어 만들어진 속성으로 계산된 값들이 해당됨 (예 : 합계, 평균)

 

🔹 분해 가능 여부에 따른 분류

- 단일 속성 : 하나의 의미로 구성됨 (예 : 이름, 학번)

- 복합 속성 : 여러 개의 하위 속성으로 나눌 수 있음 (예 : 주소 시/도, 도로명, 건물번호)

- 다중값 속성 : 여러 값을 가질 수 있으며 별도 테이블로 분리하여 관리함 (예 : 전화번호, 이메일, 취미)

 

🔹 구성방식에 따른 분류

- 기본키(PK, Primary Key) 속성 : 인스턴스를 유일하게 구별 가능하게 하는 속성 (예 : 주식별자, 반장)

- 외래키(FK, Foreign Key) 속성 : 다른 엔터티의 관계로 연결된 속성

- 일반 속성 : PK / FK 가 아닌 나머지 속성

 

💡 자식 엔터티는 부모의 기본키를 외래키로 포함

2️⃣ 도메인

속성이 가질 수 있는 데이터의 타입과 크기에 대한 제한 사항을 정의 ➜ 데이터 무결성 보장

1-7. 데이터 모델의 구성 요소 : 관계 (Relationship)

엔터티와 엔터티 간의 논리적 연관성

 

🔹 존재적 관계 : 다른 엔터티가 존재해야만 존재할 수 있는 관계 (예 : 사원, 부서)

🔹 행위적 관계 : 행동, 동작, 사건에 의해 발생하는 관계 (예 : 학생 - 수강한다 - 수강)

 

💡 ERD에서는 존재적 관계와 행위적 관계를 구분하지 않으나 UML에서는 구분함

 

1️⃣ 관계의 구성

🔹 관계명(Membership) : 관계의 이름

🔹 차수(Cardinality) : 엔터티간의 참여자의 수를 표현 (예 : 1:1, 1:M, M:N)

🔹 선택사항(Optionality) : 엔터티가 관계에 항상 참여하는지의 여부 (예 : O 선택적 참여)

✔️ "관차선"으로 암기

2️⃣ 교차 엔터티

M:N의 관계를 표현하기 위하여 생성된 엔터티 (관계형 DB는 M:N 관계의 표현이 불가능함)

3️⃣ 관계 체크사항

🔹 두 개의 엔터티 사이에 관심 있는 연관규칙이 있는가?

🔹 두 개의 엔터티 사이에 정보와 조합이 발생하는가?

🔹 관계연결에 대한 규칙이 서술되어 있는가?

🔹 관계연결을 가능하게 하는 동사가 있는가?

1-8. 식별자

인스턴스를 유일하게 구분할 수 있는 속성 또는 속성의 집합

1️⃣ 식별자의 분류

🔹 대표성 여부에 따른 분류

- 주식별자(=기본키, PK) : 대표성, 유일성, 희소성, 불변성, 존재성(Not Null)을 만족

- 보조식별자(=대체키, AK) : 유일하게 구분 가능하지만, 대표성이 없는 식별자

 

🔹 자가 생성 여부에 따른 분류

- 내부식별자 : 엔터티 내부에서 스스로 생성

- 외부식별자(=외래키, FK) : 다른 엔터티로부터 받아오는 식별자

 

🔹 속성의 수에 따른 분류

- 단일식별자 : 하나의 속성으로 구성된 식별자

- 복합식별자 : 둘 이상의 속성으로 구성된 식별자

 

🔹 대체 여부에 따른 분류

- 본질식별자 : 프로세스 상에서 현실로 존재하는 식별자

- 인조식별자 : 인위적으로 생성한 식별자

2️⃣ 식별자 관계와 비식별자 관계

🔹 식별자 관계(= 강한 연결 관계)

- 부모 엔터티로부터 받은 식별자를 자식 엔터티의 주식별자로 이용하며, Null이 있으면 안됨

- 부모 엔터티와 자식 엔터티가 같은 생명주기를 가짐

➜ 부모 엔터티가 사라지면 자식 엔터티도 사라짐

 

🔹 비식별자 관계(= 약한 연결 관계)

- 부모 엔터티로부터 받은 속성을 일반 속성으로 사용하는 경우

- 부모 엔터티와 자식 엔터티가 서로 다른 생명주기를 가짐

➜ 부모 엔터티가 사라져도 자식 엔터티는 남아있을 수 있다

 

💡 식별자는 부모와 자식간의 상호작용이 의무이나, 비식별자는 선택사항

💡 IE 표기법에서는 점선, Barker 표기법에서는 Bar(|) 여부로 비식별자 관계 파악

3️⃣ 키(Key)

 

🔹 후보키(Candidate Key) : 유일성과 최소성을 만족하는 속성 또는 속성들의 조합 (예 : 학번, 주민번호, 과목명)

🔹 기본키(Primary Key) : 후보키 중에서 대표성을 가지는 주 키(Main Key) 개체무결성 (예 : 학번)

※  개체무결성 : Null 값이나 중복된 값 저장 불가

🔹 대체키(Alternate Key) : 기본키를 제외한 나머지 후보키 (예 : 주민번호)

🔹 슈퍼키(Super Key) : 유일성은 만족하지만 최소성은 만족시키지 못하는 키 (예 : 학번&주민번호 둘 중에 하나만 있어도 유일성 만족)

🔹 외래키(Foreign Key) : 다른 테이블의 기본키를 참조하는 키 참조무결성 (예 : 학번)

※  참조무결성 : 참조할 수 없는 외래키 값을 가질 수 없음

 

💡 식별자는 논리 모델링 단계에서 사용하고, 키는 물리 모델링 단계에서 사용함

2. 데이터 모델과 SQL

-1. 정규화

데이터베이스의 이상현상을 방지하기 위하여 데이터 중복을 최소화하여 테이블을 분리하는 방법

✔️ 엔터티(Entity) = 테이블(Table) = 릴레이션(Relation)

1️⃣ 이상현상(Anomaly)

🔹 삽입이상 : 데이터 삽입 시, 의도하지 않은 값들도 삽입되는 현상

🔹 삭제이상 : 데이터 삭제 시, 의도하지 않은 값들도 삭제되는 현상

🔹 갱신이상 : 일부 데이터만 갱신되어 모순이 발생하는 현상

2️⃣ 함수적 종속

A 속성에 의해 B가 유일하게 결정됨

A를 결정자라 하고 B를 종속자라 함

 

🔹 완전 함수적 종속 : 종속자가 기본키의 모든 속성에 종속적인 경우

🔹 부분 함수적 종속 : 종속자가 기본키의 일부 속성에 종속적인 경우

3️⃣ 정규화 단계

제1정규화 ➜ 제2정규화 ➜ 제3정규화 ➜ BCNF ➜ 제4정규화 ➜ 제5정규화

 

🔹 제1정규화 : 도메인이 원자 값만으로 구성

🔹 제2정규화 : 부분적 함수 종속을 제거하여 완전 함수 종속을 만족

🔹 제3정규화 : 이행 함수 종속 관계를 제거

🔹 BCNF : 결정자가 모두 후보키가 되도록 분해

🔹 제4정규화 : 다치 종속의 제거

🔹 제5정규화 : 조인 종속성을 이용

✔️ "두부이겨다줘 = 도부이결다조"로 암기

 

🔥 1,2,3 정규화 외 나머지 정규화는 시험에 거의 출제되지 않음

2-2. 관계와 조인의 이해

1️⃣ 조인(Join)

🔹 서로 관계가 있는 테이블을 SQL로 연결해서 데이터를 조회하는 방법

🔹 정규화로 분해가 된 테이블들은 조인 성능이 낮아질 수 있음 반정규화를 수행해서 성능을 유지할 수 있음

2️⃣ 계층형 데이터 모델

🔹 같은 테이블들을 참조하여 두 개의  테이블을 조인하는 관계

🔹 계층형 질의 혹은 셀프 조인 활용

3️⃣ 상호배타적 관계

🔹 두 테이블 중 하나의 테이블만 상속될 수 있는 관계

2-3. 모델이 표현하는 트랜잭션의 이해

1️⃣ 트랜잭션

데이터베이스에서의 하나의 논리적인 작업 단위

 

🔹 Commit : 트랜잭션 성공적으로 끝났음을 알리고 데이터베이스에 저장

🔹 Rollback : 트랜잭션 중 오류가 발생하여 이전 상태로 되돌림

 

✔️ 트랜잭션의 요구사항들은 논리적 모델링 단계에서 모두 반영되어야 함

2️⃣ 트랜잭션의 4대 특성 (ACID)

🔹 원자성(Atomicity) : 수행되거나 전혀 수행되지 않아야 함(All or Nothing)

🔹 일관성(Consistency) : 트랜잭션 실행 전후로 오류가 없어야 함

🔹 고립성(Isolation) : 트랜잭션끼리 서로 간섭하면 안됨

🔹 지속성(Durability) : 수행된 결과는 영구적으로 저장됨

 

🔥 1 / 2 과목에 다 출제되는 경우가 있음

3️⃣ 트랜잭션의 격리 수준에 따른 문제점

🔹 Dirty Read : 아직 실행이 완료되지 않은 데이터를 읽는 경우

🔹 Non-Repeatable Read : 같은 쿼리를 두 번 수행하였을 때, 결과가 달라지는 현상

🔹 Phantom Read : 같은 쿼리를 두 번 수행하였을 때, 행의 개수가 바뀌는 현상

2-4. Null 속성의 이해

1️⃣ Null의 개념

🔹 미 정의된 값

🔹 0이나 빈칸과는 다른 개념

🔹 비교 불가

🔹 연산 불가

🔹 집계함수에서 제외

2️⃣ Null의 표기

🔹 IE 표기법 : Null 표현 여부 확인 불가

🔹 Barker 표기법 : Null 허용은 o / Null 비허용은 *

생년월일과 수강신청일자는 Null 허용, 이름은 null 비허용

2-5. 본질식별자와 인조식별자

1️⃣ 본질식별자와 인조식별자의 개념

🔹 본질식별자 : 프로세스 상에서 현실로 존재하는 식별자

🔹 인조식별자 : 인위적으로 생성한 식별자

2️⃣ 인조식별자의 장단점

🔹 장점 : 추가적 연산 없이 실제 비즈니스와 무관하게 설계 가능 개발 및 유지보수성 용이

🔹 단점 : 데이터 중복 가능성 불필요한 인덱스 생성

 


🔗 출처

[SQLD 완벽 요약강의]

 

반응형