본문 바로가기
DB

데이터베이스 모델링

by 가므자 2012. 2. 29.

오늘은 데이터모델링을 중심으로 데이터베이스의 기본적인 이론을 간단히 짚어보자.

먼저, 데이터베이스(Database)란 <공유하여 사용될 목적으로 통합하여 관리하는 데이터 집합>을 의미하는데 경영학적인 개념에서 출발한 것으로 알고 있다. 때문에 DB를 전공한 사람이 나중에 MBA를 취득했을 때 DB의 존재가치가 더욱 명확해지더라는 이야기를 들은 적이 있다. 전통적인 데이터 저장방법인 파일시스템(File System)의 경우, 어떤 자료를 찾으려고 하면 바이트스트림(Byte Stream)의 처음부터 읽기 시작해야 하고, 중간에 데이터를 변경하거나 추가/삭제하기 어려운 점이 있으며 대용량 데이터일 경우 이러한 단점이 더욱 심각해지는 문제가 있다. 그래서 나온 것이 데이터베이스란 놈으로, 사실 데이터가 파일로 저장된다는 점은 동일하지만(오라클은 *.dbf, MS-SQL은 *.mdf) 데이터의 검색/추가/수정/삭제 등의 작업과 데이터를 최적화된 상태로 유지시켜주는 녀석을 사용함으로써 단순한 파일시스템의 한계를 극복해냈다. 이렇게 DB에 있어 필수불가결한 녀석이 데이터베이스 관리시스템(DBMS)이다.

데이터모델링(Data Modeling)은 현실 세계의 작업이나 사물을 데이터베이스로 표현하는 작업이다. 즉, 현실 세계의 어떤 업무를 데이터 구조로 바꾸는 것으로 생각하면 되겠다. OOP에서 객체 모델링을 수행하여 클래스간의 관계로 표현하는 것과 유사하게 데이터모델링은 테이블간의 관계로 표현한다.

데이터모델링에는 몇가지 단계가 있는데, 개념적 - 논리적 - 물리적 모델링이 바로 그것이다.


1. 개념적 모델링

개체와 개체간의 관계(Relationship)를 정의하고 현실 세계의 데이터를 개념적으로 표현하여 개념적인 구조를 형성하는 것을 말하는데 이때 주로 사용하는 방법이 Peter Chen에 의해 제안된 대표적인 데이터베이스 모델인 Entity-Relationship Model (개체-관계 모델)이다.


여기서 개체(Entity)란 저장되고 관리되어야 할 정보.. 즉, 현실 세계의 대상을 말하며 관계(Relationship)은 두 개체간의 연관성을 일컫는다. 위 그림에서 보면 직원과 PC는 개체이고, 그림에는 표현되어 있지 않지만 직원과 PC는 Many-to-Many(多 대 多)의 관계로 연결되어 있다. 관계를 맺어주는 방식에도 여러 가지가 있는데, 1대다(1:N), 다대다(N:M), 이항(Binary), 삼항(Ternary), 부분합(Subtype) 등이 있다.


위 그림은 두 개체간의 관계(Binary)에 대한 예시들이다.

그리고 이건 세 개체간의 관계(Ternary)에 대한 예시.

마지막으로 Subtype에 대한 예시가 되겠다.

개념적 모델링 단계에서는 일반적으로 개체들을 추출해내고 개체들간의 관계를 설정하는 것 뿐만 아니라 개체가 어떤 속성을 가지고 있으며, 각 개체를 무엇으로 분간하는지까지 모델링한다. 속성(Attribute)은 개체를 나타내는 특성, 즉 개체 내에서 어떤 정보가 관리되는지를 말하며 속성들 중에 해당 개체를 유일하게 식별할 수 있게 하는 속성을 식별자(Identifier)라고 한다.

위 그림에서 직원 개체는 이름, 주소, 사원번호라는 속성을 가지고 있으며 PC 개체는 관리번호, 제조사를 속성으로 가지고 있다. 그리고 사원번호를 직원을 구분하는 식별자로 지정했고 PC는 관리번호로 식별된다.


2. 논리적 모델링

개념적으로 데이터모델을 완성한 다음은 논리적 모델링 단계로 넘어가게 되는데, 개념적 데이터모델링 단계에서 추출된 개체와 속성들의 관계를 보다 구조적으로 설계하는 단계를 말한다. 흔히 '스키마'를 설계하는 단계라고도 하는데 여기서 스키마(Scheme)란 개체의 구조에 대한 명세(Specification)을 일컫는다.
스키마를 설계할 때 핵심적인 부분이 키(Key)를 설정하는 작업이다.

- 후보키 : 하나의 테이블에서 유일하게 행을 식별해주는 속성
- 기본키 : 테이블의 키로 선정된 후보키. 항상 Null이 아님
- 대체키 : 기본키를 제외한 나머지 후보키
- 외래키 : 현재 포함된 테이블이 아닌 다른 테이블에서 키로 사용되는 속성
테이블 사이의 관계를 표현하기 위해 사용

일반적으로 개념적 모델링 단계에서 지정한 식별자가 기본키로 사용되며, 개체는 테이블, 속성은 컬럼, 관계는 외래키를 이용해 표현하는 매핑룰(Mapping Rule)을 사용한다.

그리고 정규화(Normalization)라는 중요한 작업이 여기서 수행되는데, 정규화란 테이블간의 데이터 중복과 의존성(Dependency)을 제거하여 이상현상을 사전에 방지하는 작업이다.
1NF(Normal Form) > 2NF > 3NF > BCNF > 4NF > 5NF 순으로 정규화가 진행되며, 뒤로 갈수록 단일 테이블의 크기(컬럼의 개수)는 작아지고 테이블의 개수는 늘어난다. 보통 3NF나 BCNF가 가장 적당하다고들 하는데, 정규화에 대해 자세한 내용은 다음 기회에 포스팅하기로 하겠다.

논리적 모델링 단계를 그림 하나로 요약하자면 아래와 같다.


3. 물리적 모델링

물리적 모델링은 논리적 데이터 모델링 과정에서 정의된 모델을 개발 DBMS 및 하드웨어의 특성을 고려하여 물리적으로 데이터베이스 스키마를 구축하는 것을 말하는데, 간단히 말하면 DB서버상에 테이블과 여타 부수적인 객체(Object)들을 생성하는 것이다.

이 단계에서 생성하는 객체는 테이블, 컬럼은 물론이고, 뷰(View), 트리거(Trigger), 저장 프로시저(Stored Procedure), 함수(Function), 인덱스(Index) 등이 있으며, 정규화의 반대개념인 역정규화 작업이 이루어진다. 정규화가 테이블을 잘게 쪼개는 거라면 역정규화는 반대로 쪼개진 테이블을 합치는 과정이라고 할 수 있는데, 이렇게 하는 이유는 개발의 용이성과 성능상의 고려사항 때문이다.

출처 : 그바람결님 http://mysaga.tistory.com/204

댓글