1. 데이터베이스 설계 단계
데이터베이스 설계는 개념적 모델링 → 논리적 모델링 → 물리적 모델링 세 단계로 진행된다.
- 개념적 모델링은 Entity 를 도출하고 ERD를 작성하는 단계이다.
- 논리적 모델링은 ERD 를 사용할 특정 DBMS 의 논리적 자료구조에 맞게 사상 (Mapping) 하는 과정이다. 예를들어 RDBMS 를 사용한다고 하면, ERD를 RDB로 사상한다. 테이블 설계와 정규화도 여기서 이루어진다.
- 물리적 모델링은 데이터베이스의 저장 구조, 액세스 경로, 인덱스 등을 설계한다.
본 포스팅에서는 개념적 모델링 단계에서 사용되는 ERD 의 표기법에 대하여 다룬다.
2. ERD 란
ERD 란 Entity-Relation Diagram (개체-관계 다이어그램) 의 준말이다. 데이터베이스 설계 단계에서 맨 처음 단계인 개념적 모델링 단계에서 ERD 를 작성하게 된다.
Entity (개체) 란 현실에 존재하는 개별적으로 식별할 수 있는 물리적 또는 추상적인 개체를 의미한다. 각 Entity 는 특징을 나타낼 수 있는 Attribute (속성) 들을 가지고 있다. 예를 들어 ‘학생’ 이라는 Entity 는 ‘학번’, ‘학생 이름’ 등의 Attribute 를 가질 수 있고, ‘수업’ 이라는 Entity 는 ‘학수번호’, ‘수업 이름’ 등의 Attribute 를 가질 수 있다.
ER(개체-관계) 모델은 위에서 설명한 Entity 사이의 Relation (관계) 을 통해 현실 세계를 표현하기 위한 설계 방식이다. 예를 들어 ‘학생’ 과 ‘수업’ Entity 끼리는 ‘수강하다’ 라는 관계를 맺을 수 있다.
이는 현재 가장 인기있는 관계형 데이터베이스의 테이블 구조로 사상 (Mapping) 하기에도 쉬워 인기가 많은 방식이다. ER 모델을 도식화 하여 표현하는 방법이 ERD 라고 할 수 있다.
3. ERD 표기법 분류
ERD 표기법은 크게 아래와 같이 Peter-Chen 표기법과 까마귀 발 표기법으로 나눌 수 있다.
3-1. Peter-Chen 표기법
Peter Chen 표기법은 흔히 대학교에서 배우는 ERD 표기법으로 실무에서는 보통 사용되지 않는 방법이다. 위 그림과 같이 Entity 는 직사각형, Attribute 는 타원, Relation 은 마름모로 도식화한다. 이 포스팅에서는 자세히 다루지 않는다.
3-2. 까마귀 발 표기법
까바귀 발 (Crow’s Feet) 표기법은 표기 방법이 까마귀의 발을 닮았다고 하여 붙여진 이름이다. 실무에서 가장 많이 사용되는 방식으로, ERWin 과 같은 여러 CASE(Computer Aided Software Engineering) 툴에서 가장 많이 지원하는 표기법이다.
IE 표기법, 바커 표기법 등 다양한 형태로 변형이 존재하며, 이 글에서는 실무에서 가장 많이 사용되는 IE 표기법에 대해 설명한다.
4. IE 표기법
IE 표기법 (Information Engineering Notation) 은 위에서 설명했듯 실무에서 가장 많이 사용되는 표기법이다.
4-1. Entity
위 그림과 같이 직사각형에 Entity 의 이름을 상단에 표기한다.
4-2. Attribute
Entity 이름 하단에 위 그림과 같이 좌측에 PK, FK 등의 정보를 표기하고, 우측에는 어트리뷰트의 이름을 표기한다.
4-3. Relation
점선과 실선
각 Entity 간의 관계는 기본적으로 실선과 점선으로 표현될 수 있다.
실선은 식별 (Identifying) 관계를 나타낸다. 식별 관계란 부모 Entity 의 기본키 또는 유니크키를 자식 Entity 의 기본키로 사용하는 관계이다. 즉, 자식 Entity 는 부모 Entity 가 존재해야 존재할 수 있다.
점선은 비식별 (Non-Identifying) 관계를 나타낸다. 비식별 관계란 부모 Entity 의 기본키 또는 유니크키를 자식 Entity 에서 외래키로 사용하는 관계이다. 즉, 자식 Entity 는 부모의 존재유무와 관계 없이 독립적으로 존재할 수 있다.
학생과 성적의 관계를 살펴보자. 성적 데이터는 학생이 존재해야 존재할 수 있다. 따라서 이 관계는 식별 관계이며, ERD 에서는 실선으로 나타낸다.
이번엔 학생과 과목의 관계를 살펴보자. 수강하는 학생이 없더라도 과목은 독립적으로 존재할 수 있다. 이 관계는 비식별관계이며, ERD 에서는 점선으로 나타낸다.
Mapping Cardinality
개체와 개체간의 Mapping Cardinality (대응수) 란, 특정 Entity 가 상대 Entity 와 관계를 몇 회 맺을 수 있는지를 나타낸다. 이 말만으로는 이해하기 어려우니 예시를 몇가지 들고왔다.
- 학생과 학급의 소속 관계를 살펴보자. 한 학급에는 여러 학생이 소속될 수 있지만, 한 학생이 여러 학급에 소속될 수는 없다. 이때, 학생과 학급의 Cardinality 는 N:1 이다.
- 이번에는 학생과 학생의 짝꿍 관계를 살펴보자. 한 학생이 다른 학생과 짝꿍관계를 맺을 수 있는 관계의 경우의 수는 서로 1회밖에 없다. 따라서 이 관계의 Cardinality 는 1:1 이다.
- 마지막으로 학생과 동아리간의 소속 관계를 살펴보자. 하나의 학생은 여러 동아리에 소속될 수 있다. 하나의 동아리 또한 여러 학생을 소속시킬 수 있다. 따라서 이 관계의 Cardinality 는 N:N 이다.
감이 조금 잡히는가?
IE 표기법에서는 이를 아래와 같이 까마귀 발 모양과 같이 나타낸다. 이 모양을 양쪽 Entity 쪽에 각각 표기해주면 된다.
위의 내용을 종합하여, 학생과 학급 간의 관계를 한번 ERD 로 그려보자. 그렇다면 아래와 같이 표현할 수 있을 것 이다.