- 현실 세계의 비즈니스 프로세스와 데이터 요구 사항을 추상적이고 구조화된 형태로 표현하는 과정 - 데이터베이스의 구조와 관계를 정의하며, 데이터의 저장, 조작, 관리 방법을 명확하게 정의 => 현실 세계를 단순화하여 표현하는 기법
모델링의 특징
1. 단순화(Simplification): 불필요한 세부 사항을 제거
2. 추상화(Abstraction): 간략하게 대략적으로 표현하는 과정
3. 명확화(Clarity): 정확하게 현상을 기술하는 과정
데이터 모델링 3가지 관점
1. 데이터 관점: 데이터가 어떻게 저장되고, 접근되고, 관리되는지 정의하는 단계
2. 프로세스 관점: 데이터가 시스템에서 어떻게 흐르고 변환되는지에 대한 확인
3. 데이터와 프로세스 관점: 특정 프로세스가 어떤 데이터를 사용하는지, 어떻게 생성되고 변경되는지를 모델링
데이터 모델링 유의점
1. 중복(Duplication): 테이블에 같은 정보가 저장되지 않게 설계
2. 비유연성(Inflexibility): 잦은 모델 변경이 되지 않도록 주의
3. 비일관성(Inconsistency): 정보가 모순되거나 상반된 내용을 갖는 상태
=> 데이터의 중복이 없더라도 비일관성을 발생할 수 있다.
데이터 모델링 3가지 요소
1. 대상(Entity): 업무가 관리하고자 하는 대상(객체)
2. 속성(Attirbute): 대상들이 갖는 속성(하나의 특징으로 정의될 수 있는 것)
3. 관계(Relationship): 대상들 간의 관계
데이터 모델링의 3단계
1. 개념적 모델링
- 업무 중심적이고 포괄적인 수준의 모델링 - 추상화 수준이 가장 높다. - 업무를 분석 뒤 업무의 핵심 Entity를 추출하는 단계 - 도출된 핵심 Entity들과의 관계를 표현하기 위해 ERD 작성
2. 논리적 모델링
- 개념적 모델링의 결과를 토대로 세부속성, 식별자, 관계 등을 표현하는 단계 - 데이터 구조를 정의하기 때문에 동일한 형태의 데이터 사용시 재사용 가능 - 데이터 정규화 수행 - 재사용 가능성이 높은 논리적 모델은 유지보수가 용이
3. 물리적 모델링
- 논리 모델링이 끝나면 이를 직접 물리적으로 생성하는 과정 - 데이터베이스 성능, 디스트 저장 구조 하드웨어의 보완성, 가용성 등을 고려 - 가장 구체적인 데이터 모델링 - 추상화 수준은 가장 낮음(가장 구체적인 모델링이기 때문에)
스키마
데이터 베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집
스키마의 3단계 구조
1. 외부 스키마
- 사용자가 보는 관점에서 데이터베이스 스키마를 정의 - 사용자나 응용 프로그램이 필요한 데이터를 정의(View: 사용자가 접근하는 대상)
2. 개념 스키마
- 사용자 관점의 데이터베이스 스키마를 통합하여 데이터베이스의 전체 논리적 구조를 정의 - 전체 데이터베이스의 개체, 속성, 관계, 데이터타입 등을 정의
3. 내부 스키마
- 데이터가 물리적으로 어떻게 저장되는지 정의 - 데이터의 저장 구조, 컬럼, 인덱스 등을 정
3단계 스키마의 독립성
1. 논리적 독립성: 논리적 데이터 구조가 변경되어도(개념 스키마 변경) 응용 프로그램에 영향을 주지 않는 특성.
2. 물리적 독립성: 물리적 구조가 변경되어도(내부 스키마 변경) 개념/외부 스키마에 영향을 주지 않는 특성.
ERD(Entity Relationship Diagram): 엔터티와 엔터티 간의 관계를 시작적으로 표현한 다이어그램
ERD 작성 절차(6단계)
1. 엔터티를 도출한 후 그린다.
2. 엔터티 배치
3. 엔터티 간의 관계 설정
4. 관계명을 서술
5. 관계의 참여도 기술
6. 관계의 필수 여부 확인
1-2. 엔터티
엔터티(Entity)
- 현실 세계에서 독립적으로 식별 가능한 객체나 사물 - 업무 상 분석해야 하는 대상(Instance)로 이루어진 집합 - 인스턴스는 엔터티의 특정한 속성 값들로 구성되고, 엔터티의 개념을 현실에서 구체적으로 나타낸 것.
EX)
엔터티: 학생
속성: 학번, 이름, 학과 ...
식별자: 학번(고유한 학번으로 각 학생을 식별)
엔터티의 특징
1. 업무에서 쓰이는 정보여야 함
2. 유니크함을 보장할 수 있는 식별자가 있어야 함
3. 2개 이상의 인스턴스를 가지고 있어야 함
4. 반드시 속성을 가지고 있어야 함
5. 다른 엔터티와 1개 이상의 관계를 가지고 있어야 함
엔터티의 분류
유형 vs 무형
1. 유형 엔터티: 물리적 형태가 있음
EX) 사원, 물품, 상품, 회원 ...
2. 개념 엔터티: 물리적인 형태가 없음
EX) 조직, 보험상품, 부서, 학과 ...
3. 사건 엔터티: 업무를 수행에 따라 발생하는 엔터티
EX) 주문, 청구, 미납, 이벤트 응모 ...
발생 시점
1. 기본 엔터티: 그 업무에 원래 존재하는 정보, 자신의 고유한 주식별자를 가짐
EX) 상품, 회원 ...
2. 중심 엔터티: 기본 엔터티로부터 발생되고 그 업무에 중심적인 역할
EX) 주문 ...
3. 행위 엔터티: 2개 이상의 부모엔터티로부터 발생
EX) 주문 내역, 이벤트 응모 이력
# 엔터티의 명명규칙
- 현업에서 사용하는 용어 사용
- 가능하면 약자 사용 자제
- 단수 명사 사용, 띄어쓰기는 사용하지 않음
- 모든 엔터티에서 유일하게 이름 부여
- 엔터티 생성 의미대로 이름 부여
1-3. 속성
속성(Attribute)
- 업무에서 필요로 하는 고유한 성질, 특징을 의미(관찰 대상) - 더 이상 분리되지 않는 최소의 데이터 단위 => columm(열)으로 표현
엔터티, 인스턴스, 속성, 속성값의 관계
- 한 개의 엔터티는 2개 이상의 인스턴스 집합이어야 한다. (하나의 테이블은 2개 이상의 행을 가짐)
- 한 개의 엔터티는 2개 이상의 속성을 갖는다. (하나의 테이블은 2개 이상의 컬럼으로 구성)
- 한 개의 속성은 1개의 속성값을 가진다. (각 컬럼의 값은 하나씩만 삽입 가능)
속성은 엔터티에 속한 엔터티에 대한 자세하고 구체적인 정보를 나타냄. 각 속성은 구체적인 값을 가짐
속성의 특징
- 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 한다.
- 하나의 속성은 한 개의 값만을 가진다.
- 하나의 속성에 여러 개의 값이 있는 다중값일 경우 별도의 엔터티를 이용하여 분리한다.
- 하나의 인스턴스는 속성마다 반드시 하나의 속성값을 가진다.
=> 각 속성이 하나의 값을 갖고 있음(속성의 원자성)
속성의 분류
특성
1. 기본 속성: 업무로부터 추출된 모든 속성, 엔터티에서 가장 일반적으로 많이 존재하는 속성
EX) 원금, 예치기간 ...
2. 설계 속성: 기본 속성 외에 업무를 규칙화하기 위해 새로 만들어지거나 기본 속성을 변형하여 만들어지는 속성
EX) 상품 코드, 지점 코드 ...
3. 파생 속성: 다른 속성에 의해 만들어지는 속성
EX) 합계, 평균, 이자 ...
구성방식
1. PK(Primary Key, 기본키): 인스턴스를 식별할 수 있는 속성
2. FK(Foreign Key, 외래키): 다른 엔터티와의 관계에서 포함된 속성
3. 일반 속성: 엔터이에 포함되어 있고, PK/FK에 포함되지 않는 속성
분해여부
1. 단일 속성: 하나의 의미로 구성된 경우
EX) 회원 ID, 이름 ...
2. 복합 속성: 여러개의 의미로 구성된 경우
EX) 주소(시, 구, 동 등으로 분해)
3. 다중값 속성: 속성에 여러개의 값을 가질 수 있는 경우, 엔터티로 분해된다.
EX) 상품 리스트
# 속성의 명명규칙
- 해당 업무에서 사용하는 이름을 부여
- 서술식 속성명은 사용하지 않음
- 약어의 사용은 가급적 제한
- 전체 데이터 모델에서 유일한 명칭
도메인
- 각 속성이 가질 수 있는 값의 범위
1-4. 관계
관계(Relationship)
- 엔터티간의 연관성을 나타낸 개념
관계의 종류
1. 존재적 관계: 한 엔터티의 존재가 다른 엔터티의 존재에 영향을 미치는 관계
EX) 부서 엔터티가 삭제되면 사원 엔터티의 존재에 영향을 미침
2. 행위적 관계: 엔터티 간의 어떤 행위가 있는 것을 의미
EX) 고객 엔터티의 행동에 의해 주문 엔터티가 발생
ERD에서는 존재 관계와 행위 관계를 구분하지 않는다.
관계의 구성
1. 관계명: 관계의 이름
EX) 소속된다/ 포함된다
2. 관계차수: 관계에 참여하는 수
=> 1:1 / 1:M / N:M 관계
3. 관계선택사양: 필수인지 선택인지의 여부
=> 필수적 관계 / 선택적 관계
# 관계의 페어링
- 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것
- 차수: 하나의 엔터티와 다른 엔터티 간의 레코드 연결 방식 - 페어링: 두 엔터티 간의 특정 연결을 설명
1-5. 식별자
식별자
- 하나의 엔터티에 구성된 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성 - 하나의 유일한 식별자가 존재해야 함 - 논리 모델링: 식별자 / 물리 모델링: 키
주식별자(PK)
1. 유일성: 주식별자에 의해 모든 인스턴스를 유일하게 구분
2. 최소성: 주식별자를 구성하는 속성은 유일성을 만족하는 최소한의 속성으로 구성
3. 불변성: 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함
4. 존재성: 주식별자가 지정되면 반드시 값이 존재해야 하며 NULL은 허용 안됨
식별자 분류
대표성 여부
1. 주식별자: 유일성, 최소성, 불변성, 존재성을 가진 대표 식별자 / 다른 엔터티와 참조 관계로 연결
2. 보조식별자: 인스턴스를 식별할 수는 있지만 대표 식별자 아님 / 다른 엔터티와 참조 관계로 연결 X
생성여부
1. 내부식별자: 엔터티 내부에서 스스로 생성된 식별자
2. 외부식별자: 다른 엔터티에서 온 식별자
속성 수
1. 단일식별자: 하나의 속성으로 구성
2. 복합식별자: 2개 이상의 속성으로 구성
대체 여부
1. 본질(원조)식별자: 업무 프로세스에 존재하는 식별자, 가공되지 않은 원래의 식별자
2. 인조(대리)식별자: 주식별자의 속성이 2개 이상인 경우 그 속성들을 하나로 묶어 사용하는 식별자
# 주식별자 도출 기준
- 해당 업무에서 자주 이용되는 속성을 주식별자로 지정
- 명칭이나 내역등과 같은 이름은 피한다
- 속성의 수를 최대한 적게 구성한다
# 관계간 엔터티 구분
1. 강한 개체: 독립적으로 존재할 수 있는 엔터티
2. 약한 개체: 독립적으로 존재할 수 없는 엔터티
식별 관계 vs 비식별 관계
식별 관계
- 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 되는 관계 - 부모 엔터티가 있어야 생성 가능 - ERD에서 실선으로 표시
비식별 관계
- 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 아닌 일반 속성이 되는 관계 - 부모 엔터티가 없는 자식 엔터티 생성 가능 - 자식 엔터티가 존재하는 상태에서 부모 엔터티가 삭제 가능 - ERD에서 점선으로 표시
1-6. 정규화
정규화(Normalization)
- 최소한의 데이터만을 하나의 엔터티에 넣는 식으로 데이터를 분해하는 과정 - 데이터의 일관성, 최소한의 중복, 최대한의 데이터 유연성을 위한 과정 - 데이터의 중복을 제거하고 데이터 모델의 독립성을 확보 - 데이터 이상현상을 줄이기 위한 데이터 베이스 설계 기법 - 논리 데이터 모델링 수행 시점에서 고려
정규화 단계
제 1정규화(1NF)
- 모든 속성은 반드시 하나의 값만 가져야 한다. EX) 상품에 여러 값이 있으므로 이를 여러 인스턴스로 분해
제 2정규화(2NF)
- 엔터티의 모든 일반 속성은 반드시 모든 주식별자에 종속되어야 한다. - PK가 2개 이상일 때 발생하며 PK의 일부와 종속되는 관계가 있다면 분리한다. EX)
제 3정규화(3NF)
- 주식별자가 아닌 모든 속성 간에는 서로 종속 될 수 없다. - 제 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분리 * 이행적 종속: A=>B, B=>C의 관계가 성립할 때, A=>C가 성립되는 것 EX)
* 결정자와 종속 관계: 만약 A속성이 B속성의 값을 결정하면, A는 B의 결정자, 반대로 B는 A에 종속된다.
BCNF 정규화: 모든 결정자가 후보키가 되도록테이블을 분해하는 것(결정자가 후보키가 아닌 다른 컬럼에 종속되면 안됨)
1-7. 관계와 조인의 관계
관계(Relationship)
- 엔터티의 인스턴스 사이의 논리적인 연관성 - 부모의 식별자를 자식에 상속하고, 상속된 속성을 매핑키(조인키)로 활용 => 부모, 자식을 연결 EX)
관계의 분류
1. 존재 관계: 엔터티 간의 상태를 의미
EX) 사원 엔터티는 부서 엔터티에 속속
2. 행위 관계: 엔터티 간의 어떤 행위가 있는 것을 의미
EX) 주문은 고객이 주문할 때 발생
조인(Join)
- 두 테이블의 데이터를 동시에 출력하거나 관계가 있는 테이블을 참조하기 위해서는 데이터를 연결 EX)
계층형 데이터 모델
- 자기 자신끼리 관계가 발생 - 하나의 엔터티 내의 인스턴스끼리 계층 구조를 가지는 경우 *셀프 조인: 계층 구조를 갖는 인스턴스끼리 연결하는 조인
상호배타적 관계
- 두 테이블 중 하나만 가능한 관계 EX) 주문은 개인고객이거나 법인고객 둘 중 하나의 고객만이 가능
1-8. 모델이 표현하는 트랜잭션의 이해
트랜잭션(Transaction)
- 하나의 연속적인 업무 단위 - 트랜잭션에 의한 관계는 필수적인 관계 형태
EX) 계좌이체 A고객이 B고객에게 100만원을 이체하려고 가정.
STEP1) A 고객의 잔액이 100만원 이상인지 확인
STEP2) 이상이면, A고객 잔액을 -100UPDATE
STEP3) B 고객 잔액에 +100 UPDATE
=> 이때 2번 3번은 동시에 수행되어야 함
즉, 모두 성공하거나 취소 되어야함 => 이런 특성을 작는 연속적인 업무 단위를 "트랜잭션"
* 주의
- A고객 잔액 차감과 B고객 잔액 가산이 서로 독립적으로 벌생하면 안됨
- 부분 COMMIT 불가
필수적, 선택적 관계의 ERD
- 두 엔터티의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성
- 두 엔터티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현
* IE 표기법) 필수적 관계: 원 X / 선택적 관계: 원 O
* 바커 표기법) 필수적 관계: 실선 / 선택적 관계; 점선
1-9. null 속성의 이해
NULL
- 아직 정해지지 않은 값 - 빈문자열('')과 0과는 다른 개념
NULL의 특성
1. NULL을 포함한 연산 결과는 항상 NULL
2. 집계함수는 NULL을 제외한 연산 결과 RETURN
*집계함수: sum / avg / min / max ...
- 가로 연산: NULL이 표함되어 있으면 결과값은 NULL - 세로 연산: 다른 인스턴스의 데이터와 연살할 때는 NULL값을 제외
1-10. 본질식별자
본질식별자
- 업무에 의해 만들어지는 식별자 (꼭 필요한 식별자)
인조식별자
- 인위적으로 만들어지는 식별자 (꼭 필요하지는 않지만 관리의 편이성 등의 이유로 인위적으로 만들어지는 식별자)