데이터 모델링
모델링의 특징
- 추상화(Abstraction) - 대상의 주요 특징을 추출하여 일정한 형식으로 표현한다. 대상을 범주화하여 클래스로 구분하고 공통된 특징을 서술하는 객체지향 설계에서의 추상화의 개념도 이와 같은 의미라고 할 수 있다.
- 단순화(Simplification) - 복잡한 현실세계를 그대로 표현하지 않고 보다 단순하게 표현한다. UML(Unified Modeling Language)이나 ERD(Entity Relationship Diagram)와 같이 제한된 언어나 약속된 표기법을 사용하여 누구나 이해하기 쉽도록 한다.
- 명확화(Clarity) - 모델링의 결과는 보는 사람에 따라 서로 다르게 해석되지 않고 대상을 명확하게 이해할 수 있도록 모호함이 없게 기술한다.
데이터 모델링 시 유의사항
- 중복(Duplication) 최소화 - 데이터베이스의 여러 곳에 같은 정보를 중복하여 저장하지 않아야 한다.
- 비유연성(Inflexibility) 최소화 - 데이터의 정의와 데이터의 사용 프로세스를 분리하여 데이터 또는 프로세스의 변화가 응용 프로그램과 데이터베이스에 미치는 영향을 최소화해야 한다.
- 비일관성(Inconsistency) 최소화 - 데이터 간의 상호 연관관계를 명확하게 정의하여 데이터가 일관성 있게 유지되어야 한다.
모델링의 세 가지 관점
- 데이터 관점(대상, What) - 업무를 구성하는 데이터에 집중하여, 어떤 데이터들이 서로 관계를 맺고 사용되는지를 모델링하는 것이다. 정적분석, 구조분석 등을 기반으로 한다.
- 프로세스 관점(처리방법, How) - 업무의 흐름에 집중하여, 업무가 실제로 처리하는 일이 어떻게 처리되는지를 모델링하는 것이다. 동적분석, 도메인분석 등을 기반으로 한다.
- 데이터와 프로세스의 상관 관점(대상과 처리방법의 상관관계, Interaction) - 업무를 구성하는 데이터와 프로세스가 서로 어떻게 관계를 맺고 영향을 주고받는지를 모델링하는 것이다. CRUD(Create, Read, Update, Delete) 분석을 기반으로 한다.
모델링의 세 가지 단계
- 개념적 데이터 모델링(Conceptual Data Modeling) - 가장 높은 추상화 레벨을 가진 모델링으로 업무와 개념 중심으로 포괄적인 수준에서 모델링을 수행할 때 이루어진다. EA(Enterprise Architecture)를 수립할 때 많이 이용되며 이 단계에서 엔터티(Entity)와 속성(Attribute)을 도출한다.
- 논리적 데이터 모델링(Logical Data Modeling) - 데이터 모델에 대한 키(Key), 속성(Attribute), 관계(Relationship) 등을 표현하며 서로 다른 DBMS(Datavase Manage,ent System)에 적용이 가능한 수준에서의 추상화 레벨을 가지므로 재사용성이 높다. 정규화를 통해 중복 데이터를 최소화한다. 이 단계에서 식별자를 도출하고 관계를 정의한다.
- 물리적 데이터 모델링(Physical Data Modeling) - 특정 DBMS에 맞추어 구현이 가능한 수준에서 모델링을 수행하는 것으로 DBMS의 성능이나 보안, 가용성 등을 고려하여 설계하는 것이다. 가장 낮은 수준에서의 추상화 레벨을 가진다. 성능 향상을 위해 반정규화를 수행하며 테이블, 인덱스, 함수 등을 생성한다.
ANSI-SPARC에서 정의한 3단계 스키마 구조
- 외부 스키마(External Schema) - 사용자 관점, 사용자 또는 애플리케이션이 바라보는 데이터베이스 스키마를 정의한다. 다중 사용자 뷰를 제공한다.
- 개념 스키마(Conceptual Schema) - 설계자 관점, 모든 사용자가 바라보는 데이터베이스 스키마를 통합하여 나타낸다. 전체 데이터베이스에 저장되는 데이터와 그 관계를 정의한다. 통합된 뷰를 제공한다.
- 내부 스키마(Internal Schema) - 개발자 관점, 디스크나 메모리 상의 물리적, 실질적 저장구조를 나타내며, 테이블, 칼럼, 인덱스 등을 정의한다. 물리적 뷰를 제공한다.
ERD 작성순서
- 엔터티를 도출한다.
- 도출된 엔터티를 적절하게 배치한다. 중요한 엔터티는 왼쪽 상단에 배치한다.
- 엔터티 간의 관계를 설정한다.
- 관계명을 기술한다. (행위 관계, 존재 관계를 표현)
- 관계의 참여도(Cardinalily)를 기술한다. (일대일, 일대다, 다대다 표현)
- 관계의 필수/선택 여부를 기술한다. (Null 값을 가질 수 있는지 여부)
엔터티
엔터티의 특징
- 업무에서 필요로 하고 관리하고자 하는 정보이어야 한다.
- 식별이 가능하도록 유일한 식별자를 가져야 한다.
- 영속적으로 존재하는 인스턴스가 두 개 이상인 집합을 이루어야 한다.
- 하위요소로 반드시 속성을 가져야 한다.
- 엔터티는 다른 엔터티와 한 개 이상의 관계를 가져야 한다. 단, 통계성 엔터티나 코드성 엔터티의 경우 관계를 생략할 수 있다.
인스턴스
- 엔터티는 구조를 정의한다. 이 구조에 맞게 실제로 디스크에 저장된 데이터 1건을 인스턴스라고 한다.
엔터티의 분류
- 발생 시점/상속 관계에 따른 분류
- 기본 엔터티 - 자신의 고유한 주식별자를 가지는 독립적으로 생성되는 엔터티이다. (사원, 부서, 고객, 상품, 자재 등)
- 중심 엔터티 - 기본 엔터티로부터 주식별자를 상속받아 생성되며 업무의 중심 역할을 하는 엔터티이다. (급여, 주문 등)
- 행위 엔터티 - 두 개 이상의 엔터티를 상속받아 생성되는 엔터티이며 내용이 자주 변경되거나 데이터양이 계속 증가된다. (급여내역, 주문내역 등)
- 물리적 형태의 존재 여부에 따른 분류
- 유형 엔터티 - 물리적 형태가 존재하는 엔터티 (사원, 상품, 학생 등)
- 개념 엔터티 - 물리적 형태 없이 개념적으로 정의되는 엔터티 (부서, 상품분류, 강의 등)
- 사건 엔터티 - 업무를 수행하면서 발생하는 행위나 이벤트를 나타내는 엔터티 (주문, 대여, 수강 등)
교차 엔터티(Interaction Entity)
- M:N 관계를 해소하기 위해 만들어진 엔터티를 교차 엔터티라고 한다.
속성
속성의 개념
- 엔터티에 대한 자세하고 구체적인 정보를 나타낸다.
- 엔터티의 특징 중 업무와 관계되어 필요한 것들을 속성으로 정의한다.
- 의미상으로 더 이상 분해되지 않는 최소의 데이터 단위이다.
속성값
- 속성이 가질 수 있는 특정 값을 말하며 하나의 엔터티 인스턴스가 가진 속성의 구체적인 값을 말한다.
- 하나의 엔터티 인스턴스에서 각각의 속성은 한 개의 속성값만을 가져야 한다.
- 한 개 이상의 속성값을 가질 수 있는 경우라면 1차 정규화를 수행하여 한 개의 속성값만 갖도록 해야 한다.
엔터티, 인스턴스, 속성값
- 한 개의 엔터티는 두 개 이상의 인스턴스를 가진다. (엔터티는 인스턴스의 집합이다.)
- 한 개의 엔터티는 두 개 이상의 속성을 가진다. (엔터티는 속성의 집합이다.)
- 한 개의 속성은 한 개의 속성값만 가진다.
속성의 분류
- 속성의 특성에 따른 분류
- 기본 속성 - 엔터티가 본래부터 가지고 있어야 하는 속성
- 설계 속성 - 엔터티가 본래부터 가지고 있던 속성은 아니지만 설계 시 필요하다고 판단되어 도출된 속성
- 파생 속성 - 다른 속성으로부터 계산되거나 특정 규칙에 따라 변형되어 만들어진 속성
- 속성의 구성방식에 따른 분류
- PK(Primary Key, 기본키) 속성 - 해당 엔터티의 인스턴스를 유일하게 식별할 수 있는 속성
- FK(Foreign Key, 외래키) 속성 - 관계를 통해 다른 엔터티의 속성을 가져와 포함시킨 속성
- 일반 속성 - 키(PK 또는 FK)가 아닌 나머지 속성
도메인
- 속성이 가질 수 있는 값의 범위(값의 데이터 타입과 크기)를 정의한 것이다.
- 데이터 타입, 크기, 제약사항 등을 묶어 별도의 이름을 붙여 정의하며 이렇게 정의된 도메인을 각각의 속성에 지정할 수 있다.
- 도메인이 지정된 속성은 해당 도메인의 데이터 타입, 크기, 제약사항 등을 따른다.
관계
관계의 개념
- 엔터티와 엔터티 간에 맺고 있는 연관성을 의미한다.
관계의 유형
- 존재적 관계 - 사원과 부서의 관계처럼 일종의 소속 관계를 갖는 경우로, 존재 자체로 서로 연관성을 갖는 관계를 의미한다.
- 행위적 관계 - 고객과 주문의 관계처럼 한 엔터티가 특정 행위나 이벤트를 일으킬 경우에 연관성이 발생하는 관계를 의미한다.
표기법
- 관계명(Membership) - 관계의 이름을 나타낸다. 존재적 관계와 행위적 관계를 기술한다.
- 관계차수(Cardinality) - 1:1(일대일), 1:M(일대다), M:N(다대다)과 같이 관계를 맺는 엔터티 인스턴스의 차수를 나타낸다.
- 관계선택사양(Optionality) - 필수적 관계인지 선택적 관계인지를 나타낸다. (Null 가능 여부를 의미한다.) 필수적 관계인 경우 Null 값을 가질 수 없고 선택적 관계인 경우 Null 값을 가질 수 있다. 선택적 관계인 경우에는 까치발 기호에 O 표시가 덧붙는다.
식별자
식별자의 개념
- 일반적으로 사람을 신분증(ID Card)으로 구분하는 것처럼 엔터티 인스턴스 역시 유일하게 구별할 수 있는 속성이 있어야 하며, 이런 속성을 식별자(Identifier)라고 부른다. 식별자는 해당 엔터티 인스턴스의 대표 속성이라고 할 수 있다.
주식별자
- 주식별자는 해당 엔터티 인스턴스를 유일하게 구별해주는 식별자로서 PK(Primary Key)에 해당하는 속성을 말한다. 주식별자는 아래의 네 가지 성질을 만족해야 한다.
- 유일성 - 각 엔터티 인스턴스를 유일하게 구별할 수 있어야 한다.
- 최소성 - 유일성을 보장하면서도 최소 개수의 속성이 되어야 한다.
- 불변성 - 속성값이 최초 생성 시 부여된 값에서 변경되지 않고 유지되어야 한다.
- 존재성 - 반드시 값을 가져야 하며 Null 값을 가질 수 없다.집계 함수는 Null을 제외하고 계산**
식별자의 분류
- 대표성 여부
- 주식별자(Primary Identifier) - 해당 엔터티 인스턴스를 유일하게 구별할 수 있는 식별자로 유일성, 최소성, 불변성, 존재성을 만족하는 식별자이다. 다른 엔터티와 참조관계를 연결할 수 있다.
- 보조식별자(Alternate Identifier) - 해당 엔터티를 유일하게 구별할 수 있는 식별자이기는 하나 대표성을 가지지 못하며 다른 엔터티와 참조관계를 연결할 수 없는 식별자이다.
- 스스로 생성 여부
- 내부식별자(Internal Identifier) - 엔터티 내부에서 스스로 만들어지는 식별자이다.
- 외부식별자(Foreign Identifier) - 관계를 통해 다른 엔터티로부터 받아오는 식별자이다. FK(Foreign Key)라고도 한다.
- 속성의 수
- 단일식별자(Single Identifier) - 식별자를 구성하는 속성이 하나인 식별자이다.
- 복합식별자(Composite Identifier) - 식별자를 구성하는 속성이 둘 이상인 식별자이다.
- 대체 여부
- 본질식별자(Original Identifier) - 업무에 존재하는 본래의 식별자, 원조식별자라고도 한다.
- 인조식별자(Surrofate Identifier) ****- 업무에 존재하지 않으나 원조식별자가 너무 복잡하게 구성되어 있어 인위적으로 만든 식별자. 대리식별자라고도 한다.
식별자 관계
- 엔터티 간의 강한 연결 관계를 표현한다.
- 식별자가 자식 엔터티의 주식별자 구성에 포함되며 ERD로 그릴 때 실선으로 표현한다.
- 부모 엔터티 인스턴스와 자식 엔터티 인스턴스가 같은 생명주기를 가질 때, 즉 부모 엔터티 인스턴스가 소멸할 때 자식 엔터티 인스턴스도 같이 소멸하는 경우에는 식별자 관계로 표현하는 것이 적합하다.
비식별자 관계
- 엔터티 간의 약한 연결 관계를 표현한다.
- 부모 엔터티의 식별자가 자식 엔터티의 일반 속성이 된다.
- ERD로 그릴 때 점선으로 표현한다. 부모와 자식 엔터티 인스턴스가 서로 다른 생명주기를 가질 때에는 비식별자 관계가 더 적합하다.
- 자식 엔터티의 주식별자를 부모 엔터티와 별도로 생성하거나 부모 엔터티 인스턴스에 참조값이 없어도 자식 엔터티 인스턴스가 생성될 수 있을 때는 비식별자 관계를 고려해야 한다.
- 여러 개의 엔터티를 하나로 통합하면서 각각의 엔터티가 가지고 있는 여러 개별관계가 통합될 때에도 비식별자 관계를 우선적으로 고려하는 것이 좋다.
정규화
제1정규형
- 모든 속성이 하나의 속성값만을 가지고 있으면서 유사한 속성이 반복되지 않는 상태를 제1정규형이라고 하며 제1정규형으로 만드는 것을 제1정규화 또는 1차 정규화라고 한다.
- 하나의 속성이 여러 속성값을 가질 때나 하나의 테이블에 유사한 속성이 반복될 때 이를 별도의 테이블로 분리한다.
1차 정규화 수행 후의 관계
하나의 엔터티 내에서 주식별자에 대해 일반 속성은 1:1 관계를 가져야 한다. 만약 1:M의 관계가 성립한다면 1차 정규화 대상이다. 1:M 관계가 성립한다는 것은 결국 하나의 속성이 여러 속성값을 가질 때나 하나의 테이블에 유사한 속성이 반복될 때와 같기 때문이다.
제2정규형
- 주식별자가 두 개 이상으로 구성된 복합식별자인 경우, 일반 속성이 주식별자의 일부에만 종속성을 가질 때가 있는데 이를 부분 함수종속성이라고 한다. 제2정규형은 이런 부분 함수종속성을 제거한 상태이다. 제2정규형을 만드는 것을 제2 정규화 또는 2차 정규화라고 한다.
함수종속성(FD, Functional Dependency)
함수(Function)란 집합 X에서 집합 Y로의 대응 관계를말한다. 하나의 X값에 대해서 하나의 Y값만 대응되며 X를 Y의 결정자라고 하고, Y를 X의 종속이라고 한다.
함수종속성이란 테이블의 속성이 함수의 대응 관계처럼 논리적 종속 관계를 가지는 성질을 말한다. 테이블의 모든 일반 속성은 주식별자에 완전하게 종속적이어야 하며 이를 완전 함수종속성이라고 한다.
제3정규형
- 주식별자가 아닌 일반 속성 간에 함수종속성이 존재할 때 이를 이행 함수종속성이라고 한다. 이행 함수종속성이 제거된 상태가 제3정규형이며 제3정규형을 수행하는 것을 제3 정규화 또는 3차 정규화라고 한다.
이행 함수종속성(Transitive Dependency)의 정확한 의미는 집합 A,B,C가 있을 때, A -> B이고 B -> C이면 A -> C가 성립하는 것이다. PK 속성 A와 일반 속성 B, C가 있을 때, B -> C의 함수종속성이 존재하면 C는 A에 대해 이행 함수종속성을 가진다고 말한다. (일반 속성 B는 PK 속성 A에 대해 A-> B가 이미 성립하므로) 즉, 일반 속성이 PK 속성에 대해 이행 함수종속성을 가진다는 것은 직접적 함수 종속 관계가 아니라는 것이므로 이를 분리하는 제3정규화가 필요한 것이다.