📌 현실에 있는것 → 프로그래밍화 시키는 과정
데이터 시스템 구조를 사람이 이해할 수 있게 형상화 하는 과정.
사람이 정보로 의미있는 대상을 식별(개념적) ➡️ 기호 등을 통해 추상화하여 표현(논리적) ➡️ DB구축을 위해 구체화(물리적)
why? 현업 인터뷰, 업무 지침서 등 현행 업무를 파악하기 위해서 한다.
📌 데이터 모델의 종류
- 개체관계 모델(ER, Entity-Relationship Model)
- 관계 모델(Relational Model)
- 계층 모델(Hierarchical Model)
- 망 모델(network model)
📌 모델링 순서
개념 모델링 ➡️ 논리 모델링 ➡️ 물리 모델링
흔하게 보이는 영수증을 보게되면 생각보다 많은 정보들이 들어있다.
ex 매장명, 주소, 전화번호, 주문 상품 수량, 금액, 카드사, 카드번호 등등…
영수증의 데이터에서 관리해야할 데이터를 식별하고 모형화하여 하나의 엔티티와 속성들로 표현할 수 있다.
이러한 과정을 개념 모델링이라고도 부른다. 개념 모델링은 개념을 파악하고 업무를 파악하는 용도로 사용된다.
논리 모델링은 엔티티와 속성이 나누어진 개념 모델링을 업무에서 사용할 수 있게 체계화 하고 구체화하여 데이터 모델로 표현한다.
물리 모델링은 논리 모델링을 업무와 타협하는 단계이다.
ER모델은 표현하고자 하는 현실 세계의 업무를 개체와 관계라는 두 가지 개념으로 표현하는 모델이다.
ER표기법을 사용하여 표현한다.
ERD : ER에서 사용하는 실체와 관계를 도식화한 것, 이를 알기 쉽게 도형으로 표현한다.
요구사항 확인을 잘해야 한다.중복이 없어야 한다.📌 엔티티, 관계, 속성, 식별자
클래스와 비슷함iv와 비슷함엔티티는 고객, 상품, 직원, 조직, 서비스, 직업처럼 개념적인 것이다. 객체지향개념의 클래스와 비슷하다.
엔티티는 반드시 각 인스턴스를 식별할 수 있는 속성이나 관계가 하나 이상 정의되어야 한다.
ex 고객 (슈퍼타입), 개인 고객, 법인 고객 (서브타입)Java로 예를 들면 서브타입은 슈퍼타입을 상속받았다.
ex 개인고객, 법인고객 ➡️ 고객으로 합침 - join을 하지않아 개발 생산성 증대,💡DB제약조건 무결성 : PK, FK, Not Null 등등.. (잘못된 데이터가 들어오지 않게하기 위함)
엔티티의 특수화
일반화의 반대 개념으로, 하나의 상위수준 엔티티를 둘로 쪼개 두개의 하위수준 엔티티로 나누는 하향식 접근방식
엔티티의 집단화
여러 엔티티가 하나의 엔티티로 취급하는 경우
ex 고객과 상품간의 관계를 단일 엔티티(주문상품)으로 재정의 해 배송과 관계를 맺는다.
엔티티의 다양한 분류

관계에 따른 분류
고객, 상품 등주문상품은 주문에서 주문번호를 상속받아 식별자로 사용고객, 상품, 창고, 조직주문, 결제, 배송, 청구주문상품, 주문배송계약은 고객과 상품의 거래 관계에 의해 생성되며, 고객과 상품을 부모로 갖는다.📌 ER 모델의 구성요소
- 엔티티
- 관계 - 관계수, 선택성, 식별성, 관계명
- 속성
엔티티와 엔티티 간에 존재하는 업무 규칙을 정의하고 엔티티 간에 어떤 관계가 이루어질 수 있는지 표현한다.
엔티티간의 대응되는 최대 인스턴스 수
상대 엔티티 쪽에 까마귀 발 (Crow’s Foot)로 표시한다.
반드시 양쪽다 서로의 관계를 확인해야함
1 : 1
: 엔티티 하나가 다른 엔티티 하나와 관계를 가지는 경우다.
ex 직원과 인턴과정,
중요한 문서가 있을 때, 테이블을 쪼개 보여줄 수 있는 부분과 보안상 가려야하는 부분 1 : 1로 join해서 관계를 맺는다.

1 : M
: 엔티티 하나가 다른 엔티티 여러 개와 관계
ex 부서와 직원

M : N
: A엔티티가 B엔티티 개체 여러개와 관련있고, B엔티티 개체 하나는 A엔티티 개체 여러개와 관계가 있다. ex 학생과 수강과목

필수냐 선택이냐 로 구분이 가능하다.
엔티티 인스턴스에 대한 상대 엔티티 인스턴스 존재 유무를 나타낸다.
필수 — 필수
: A 엔티티의 인스턴스에 대해 B 엔티티 인스턴스가 반드시 존재해야 하고,
B 엔티티의 인스턴스에 대해 A 엔티티의 인스턴스도 반드시 존재해야 한다.
ex상품을 선택하지 않고 주문을 하는 경우는 없으므로, 주문은 주문상품이 반드시 존재해야 한다.

필수 — 선택
: A 엔티티의 인스턴스에 대해 B 엔티티 인스턴스가 존재하지 않아도 되고,
B 엔티티 인스턴스에 대해 A 엔티티 인스턴스는 반드시 존재해야 한다.
ex주문하지 않은 고객은 있을 수 있으나, 모든 주문은 반드시 주문한 고객이 있어야 한다.

선택 — 선택
: A 엔티티 인스턴스에 대해 B 엔티티 인스턴스가 존재하지 않아도 되고,
B 엔티티 인스턴스에 대해 A엔티티 인스턴스도 존재하지 않아도 된다.
ex사원은 소개사원으로 등록된 계좌가 존재하지 않을 수 있고, 고객이 펀드상품에 가입할 때 소개 사원을 지정하지 않아도 되므로 계좌는 소개 사원이 존재하지 않을 수 있다.

식별자 상속은 식별관계와 비식별 관계로 구분할 수 있다.
식별 관계는 참조되는 상위 엔티티 식별자가 참조하는 하위 엔티티 식별자로 상속되는 경우를 말한다.
ex) 고객주소의 고객번호(FK)가 주문 엔티티에서 고객번호(FK)로 상속된다.
비식별 관계는 식별자가 아닌 일반 속성으로 상속되는 관계를 말한다.
*️⃣ 다른 테이블의 PK이자 내 테이블의 FK, FK인 동시에 PK인것
📌 ER 모델의 구성요소
- 엔티티
- 관계 - 관계수, 선택성, 식별성, 관계명
- 속성
데이터를 표현하는 가장 작은 단위, 하나의 엔티티는 두개 이상의 속성을 가진다.
속성명 : 실체의 특성을 규정하는 속성 명칭
식별자 여부 : 해당 속성이 엔티티 식별자에 해당하는지 표시
옵셔널리티 : 엔티티에 인스턴스가 발생할 때 값을 가져야 하는지에 대한 구분.
도메인 : 속성이 허용하는 데이터 형식과 범위를 가지고 있다.
엔티티에서 인스턴스를 개별적으로 식별할 수 있는 속성들이다.
📌 관계형 데이터 모델 (RDB)
- Key
- 제약조건
- 함수종속
- 정규화
데이터를 2차원 테이블(표) 형식으로 정의하고 표현한 모델이다.
테이블 == 릴레이션
릴레이션은 스키마헤더 와 실제 값은 인스턴스본문로 구성된다.

스키마 : 구조
인스턴스 : 실제 값
: 튜플을 고유하게 식별할 수 있는 속성 집합
ex 사원번호 + 사원명 이 두개가 고유 값. 슈퍼키임 : 튜플을 고유하게 식별 할 수 있는 최소한의 속성 집합
: 하나 이상의 후보 키 중에서 선택된 단 한개의 키
: 후보 키 중에서 기본 키가 아닌 후보 키
: 어떤 릴레이션의 어트리뷰트 값이 → 다른 릴레이션에 속한 어트리뷰트의 기본 키를 참조하는 경우
관계도

📌 목적 : DB에 오염된 데이터가 들어오는걸 막기 위함
📌 PK, FK, Not Null, Unique, Domain <-외워
📌 관계형 DB설계 시, 정규화 과정에서 이 개념이 중요하게 사용된다.
ex “고객” 테이블이 { 고객번호, 고객명, 생년월일, 전화번호, 주소 } 속성을 가지고 있을 떄
고객번호 컬럼에 다른 컬럼들이 함수적으로 종속된다.
고객번호 → (고객명, 생년월일, 전화번호, 주소)
짧게 요약
테이블의 특정 컬럼 A의 값을 알게되면, 다른 컬럼 B의 값을 알 수 있을 때
컬럼 B는 A에 함수적 종속성이 있다.
고객번호를 알면 고객명을 알 수 있으며, “고객명은 고객번호에 함수적 종속성이 있다.”
📌 정규화 : 단계별로 테이블 쪼개기
중복을 없애기 위해 더 작은 단위의 테이블로 설계하는 과정
: 성능의 저하가 심하면 어쩔 수 없이 다시 join한다. (역정규화)
: 중복되는 값이나, 중복열이 있을 경우 정규화 진행

: 제1정규형을 만족하고, 키가 아닌 어트리뷰트는 후보키 전체에 종속되어야 한다.

: 제2정규형을 만족하고, 키가 아닌 어트리뷰트들 간에는 서로 종속적인 관계가 없어야 한다.

: 정규화 과정에서 무손실 분해의 원칙이 지켜지지 않아,
원래 있던 관계성을 잃어 버리는 현상
부채꼴 함정
관계가 모호할 때가 있음
ex
회사에서 물품을 구매한 공급사를 관리하고, 여러 상품을 구매한다.
각각, 관계를 표현했을 때 물품이 어느 공급사에서 구매한 것인지 알 수없는 현상이 발생

해결방안
회사 → 공급사, 공급사 → 물품 간의 관계 변환

균열 함정
일부 엔티티와 엔티티 사이의 관계가 존재하지 않을 때 발생
ex
공급사를 통하지 않고 직접 물품을 구매할 수는 없을까?
해결방안
이럴 경우 회사 → 물품 관계를 맺어줘야 함
