ER 모델

중간고사 기간까지는 데이터베이스의 개념과 SQL을 이용해 여러 질의를 수행해보는 작업을 했습니다. 데이터베이스는 데이터를 저장할 때 중복되지 않으면서도 효과적으로 저장한다는 사실을 알게 되었습니다만, 이렇게 효과적으로 구축하는 구체적인 방법에 대해서는 다루지 않았습니다.
기말고사 기간까지는 데이터베이스 설계에 대한 내용을 다룹니다.

데이터베이스 설계는 다음과 같은 과정으로 이루어집니다.

설계 단계 수행 내용 산출물
요구 사항 분석 요구 사항의 수집 및 분석
사용자 업무환경 분석
정보의 흐름, 입력 및 출력 분석
개체 관계 등을 파악
개념적 모델링 요구 사항 정의에 근거하여 조직 개체, 애트리뷰트, 관계, 제약 조건 등을 모델
ER 모델(개체-관계 모델)이 가장 많이 쓰임
이 단계는 특정 DBMS(예: 관계 DBMS)를 고려하지 않은 단계임
개념적 스키마
ERD
논리적 모델링 DBMS를 선정한 후 실시
RDBMS를 선정한 경우, 관계형 모델에 근거하여 논리적 스키마를 생성함
스키마의 완성도를 높이기 위해 정규화 수행
정규화된 릴레이션의 스키마
물리적 모델링 특정 DBMS 소프트웨어(예: Oracle)를 선정한 후 실시
논리적 스키마에 근거하여 실제 구현가능한 저장 구조를 정의
물리적 스키마
DDL 코드
데이터베이스 구현 데이터베이스의 구축, 테스트, 튜닝 등 데이터베이스 시스템

개념적 모델링, 논리적 모델링, 물리적 모델링 등등… 우리가 앞서 배웠던 ANSI-SPAC 내용과 연관이 있습니다. 우선 데이터를 개념적으로 모델링하는 방법에 대해 알아볼 것입니다.

개념적 모델링

개념적 모델링은 요구 사항 명세를 기반으로 개념적 스키마를 만드는 과정

어떤 데이터베이스 프로젝트를 수행할 때, 가장 먼저 해야하는것은 요구사항 분석이라고 했습니다. 분석을 마치고 나면, 요구 사항들이 정리된 요구 사항 명세가 산출됩니다. 이러한 요구 사항 명세를 기반으로 개념적 모델링을 수행할 수 있고, 일단은 관계형 DBMS를 사용하는 것을 고려하지 않고 이루어집니다.

개체와 애트리뷰트

개념적 모델링을 이해하기 위해서는 우선 개체가 무엇인지 알아야 합니다.

개체, 또는 entity라고 하는 이것은 사람, 사물, 장소, 개념, 사건등 독립적으로 존재하면서 고유하게 식별이 가능한 실체를 말합니다. 우리가 앞선 예제에서 자주 다룬 부서, 사원 책같이 실체가 있는것도 있지만, 등록, 주문과 같은 행위나 개념도 있습니다.
개체 타입은 유사한 개체들의 집합입니다. 같은 애트리뷰트를 가진 개체들의 모임입니다. 예를 들면 ‘어떤 책 한권’은 개체이지만, ‘책’은 개체 타입입니다.

개체는 강한 개체 타입과 약한 개체 타입으로 구분됩니다.

개체 타입 유형 기호 설명
강한 개체 타입 실선 자신의 키를 가지고 독자적으로 존재
약한 개체 타입 이중선 독자적으로 키를 형성하지 못함.
자신을 소유하는 주인 개체가 있어야 존재 가능

애트리뷰트는 개체 타입이 가지고 있는 특징을 말합니다. 하나의 개체는 연관된 애트리뷰트들의 집합이라고 할 수 있는데, 사용하는 애트리뷰트는 개체마다 달라질 수 있습니다.
애트리뷰트는 다양한 속성이 있습니다. 이것을 표현하는 방법은 다음 표와 같습니다.

관계

관계란 개체와 개체 사이에 존재하고 있는 연관을 말합니다. 예를 들면 ‘박명춘’ 학생이 ‘데이터베이스’과목을 ‘수강하다’라는 자연어가 있을때, 박명춘과 데이터베이스는 수강하다라는 관계가 있는 것입니다.

따라서 개체와 개체 사이의 연관성을 관계라고 하는데, 관계 타입은 개체 타입과 개체 타입 사이에 존재하는 연관을 의미합니다. 아까의 예시는 하나의 개체였지만, ‘학생’개체 타입이 ‘과목’ 개체 타입 사이에 ‘수강하다’라는 관계 타입으로 연결된 것입니다.

관계 타입도 마찬가지로 애트리뷰트를 가질 수 있습니다. 관계의 특징을 기술하는 역할을 하게 되며, 학생이 어떤 과목을 수강하고, 해당 과목에서 받은 점수를 ‘수강하다’ 관계 타입에 포함시킬 수 있습니다. 예시를 들면 이해가 쉬운데, 박명춘 학생이 데이터베이스 수업에서 90점을 맞았다면, 90점이라는 점수는 ‘학생’ 개체 타입의 특성도, ‘과목’ 개체 타입의 특성도 아니라는 것을 알 수 있습니다.

관계 타입에는 차수가 존재합니다. 다만 앞선 관계 데이터 모델에서의 차수와는 조금 다른데, 관계 타입에서의 차수는 관계에 참여하는 개체 타입의 수 입니다.

마찬가지로 카디날리티 역시 존재합니다. 관계 타입에서의 카디날리티는 개체 타입간에 서로 대응되는 수를 의미합니다. 일대일(1:1), 일대다(1:N), 다대다(N:M)으로 이루어져 있습니다.