1980년대 말부터 관계형 데이터베이스와 함께 데이터 모델링의 역사가 시작되었다.
RDB에 데이터를 저장하게 되면서 데이터 중복을 방지하기 위해 엔티티 사이의 관계를 잡고 구조를 설계하는 과정인 데이터 모델링의 필요성이 생겨났다.
특히 오늘날의 데이터 중심 경제에서는 데이터 소비자와 공급자 간의 중단 없는 연결이 중요해졌고
현업 사용자의 셀프 서비스에 대한 니즈와 데이터 기반 비즈니스 의사결정이 활발해졌다.
반면 데이터의 볼륨과 복잡성이 증대하고 IT 리소스는 니즈에 비해 부족한 것이 현실이다.
즉, 데이터와 니즈는 폭발적으로 늘어난 만큼, 다양한 데이터 구조를 통합적으로 관리하는 리소스가 더 필요해지고,
데이터 제공자 중심에서 데이터 이용자 중심으로, 데이터 관리의 측면에서 데이터 활용의 측면으로 변화하는 협업의 필요성이 커졌다.
개념 모델: 전체 데이터의 큰 그림. 데이터 그룹을 묶어 주제 영역으로 식별하고 그 주제 영역들의 핵심 엔티티, 그 사이 관계를 파악하는 작업이다. 개념 모델링을 잘하기 위해서는 전체를 바라볼 수 있는 시야가 필요하다.
논리 모델: 개념 모델을 근간으로 모든 속성을 정의하고 업무적으로 정규화를 고려해 구조화하는 것이다. 예를 들어, 고객이라는 엔티티에 들어가는 이름, 성별, 주소 등등의 모든 속성을 정리해야하며, 중복이 되는 하위 속성들은 분리하는 방식으로 정규화를 할 수 있따.
물리 모델: DBMS를 정하고 DB에 맞게끔 인덱스와 파티션을 설계한다. 논리 모델에서는 모든 정규화를 실시했다면, 이 단계에서는 업무 상 조인이 잦거나 많은 경우 DBMS 성능을 고려해서 반정규화를 수행한다. 물리 모델은 DB에 스키마 형태로 들어간다. 관련 툴에서는 정규화를 suggest 해줄 수 있지만 반정규화는 사람이 직접 보고 해야 한다.
데이터 구축의 대상이 되는 업무 내용을 분석하고 이해해서 약속된 표기법으로 표현하는 작업, 즉 앞에서 설명한 데이터 모델을 만드는 작업을 말한다.
그럼 데이터 모델링의 순서는 어떻게 될까?
데이터 모델링 작업을 본격적으로 시작하기 전에, 시스템 또는 애플리케이션의 요구사항을 분석한다.
또한 필요한 데이터와 해당 데이터의 속성, 관계 등을 이해하고 문서화한다.
요구사항을 기반으로 개념적 모델을 구축한다.
데이터 간의 관계를 구상하는 단계, 각 개체들과 그 사이 관계를 발견하고 표현하기 위해 엔티티-관계 다이어그램(ERD)를 생성한다. ERD 다이어그램에 대해서는 아래에서 다시 다루겠다.
개념 데이터 모델을 근간으로, 구체화된 업무 중심의 데이터 모델을 만들어낸다. 엔티티를 테이블로 변환하고 속성을 열로 매핑하며, 관계를 외래키로 표현하여 테이블 간의 관계를 설정한다.
이 단계에서 업무에 대한 Key, 속성, 관계 등을 표시하며 정규화 활동을 수행한다. 정규화는 데이터 모델의 일관성을 확보하고 중복을 제거해 신뢰성 있는 데이터 구조를 얻는데 목적이 있다. 정규화 내용에 대해서는 아래에서 다시 다루겠다.
논리적 데이터 모델은 정보 공학 표기법인 테이블 형태로 표현한다. 추상적인 데이터가 아닌 구체화적인 데이터로 작성하며, 모든 엔티티의 속성을 표시, 각 속성마다의 데이터 타입을 명시하고 엔티티(테이블) 간의 관계를 정밀하게 맺어주며 엔티티(테이블)의 키를 지정해준다.
최종적으로 데이터를 관리할 데이터 베이스를 선택하고 데이터 베이스에 실제 테이블을 만드는 작업을 말한다. 앞서 시각적인 구조를 만들었다면 그것을 SQL 언어로 물리적인 완성을 하는 단계다.
엔티티, 속성, 주식별자, 외래식별자 --> 테이블, 컬럼, 기본키, 외래키, 뷰, 인덱스
ERD는 단어에서 의미하는 그대로 Entity 개체와 Relationship 관계를 중점적으로 표시하는 데이터베이스 구조를 한 눈에 알아보기 위해 그려놓는 다이어그램이다. 개체 관계도라고도 불리며, 요구 분석 사항에서 얻은 엔티티와 속성들의 관계를 그림으로 표현한 것이다.
엔티티는 정의 가능한 사물 또는 개념을 의미하며 데이터베이스의 테이블이 엔티티로 표현된다고 보면 된다.
엔티티에는 각 개체가 갖고 있는 속성을 포함하며, 예로 학생 엔티티라면 학번, 이름, 주소, 전공 등의 엔티티가 가지고 있는 특징들은 속성이 된다. 또한 각 속성의 값과 타입, 제약사항 등으로 값의 범위를 표현하는 것이 엔티티 도메인이다. 사용자 기호에 따라 속성 타입을 그릴 수도 있고 가독성을 위해 생략할 수도 있다.