개체관계도
“데이터의 개체·속성·관계를 표현하는 데이터 모델링 다이어그램.”
개체관계도란 무엇인가
개체관계도(ERD, Entity Relationship Diagram)는 업무에 등장하는 데이터를 개체, 속성, 관계라는 세 축으로 정리한 데이터 모델링 다이어그램이다. 개체는 관리해야 할 대상이고, 속성은 그 대상이 가진 특성이며, 관계는 개체들이 서로 맺는 연관이다.
데이터의 구조와 의미를 한 장에 압축해 보여 주므로, 분석·설계 단계에서 데이터베이스를 설계하는 출발점이자 업무 데이터에 대한 공통 언어로 기능한다. 데이터를 보는 관점을 통일한다는 점에서 프로젝트 전반의 의사소통 기반이 된다.
개체·속성·관계의 구성
개체관계도의 핵심은 개체와 개체 사이의 관계를 어떻게 정의하느냐에 있다. 개체는 고객, 주문, 상품처럼 독립적으로 식별되고 관리되는 대상이며, 각 개체는 이를 유일하게 구분하는 식별자를 가진다.
속성은 개체를 설명하는 항목으로, 이름이나 날짜, 금액 같은 값을 담는다. 관계는 두 개체가 어떻게 연결되는지를 나타내며, 하나가 여럿과 이어지는지 일대일로 대응하는지에 따라 카디널리티가 달라진다.
이 카디널리티의 정확한 명세가 데이터 구조의 골격을 결정한다.
데이터 모델링의 단계
개체관계도는 추상 수준에 따라 단계적으로 정교해진다. 처음에는 업무 관점에서 주요 개체와 관계만 잡는 개념 수준의 모델을 그리고, 이후 속성과 식별자, 관계의 상세를 더해 논리 수준으로 발전시킨다.
마지막으로 특정 데이터베이스 제품의 특성과 성능을 고려해 물리 수준으로 구체화한다. 이렇게 단계를 나누면 업무 담당자와는 개념 모델로 합의하고 개발자와는 물리 모델로 소통하는 식으로, 대상에 맞는 추상 수준의 그림을 골라 쓸 수 있다.
| 축 | 의미 | 예시 |
|---|---|---|
| 개체 | 관리 대상 | 고객, 주문, 상품 |
| 속성 | 개체의 특성 | 이름, 날짜, 금액 |
| 관계 | 개체 간 연관 | 카디널리티 |
정규화와 데이터 무결성
개체관계도는 정규화 과정과 긴밀하게 연결된다. 정규화는 하나의 속성에 여러 의미가 섞이거나 같은 데이터가 여러 곳에 중복 저장되는 구조를 분리해, 갱신 시 발생하는 이상 현상을 줄이는 작업이다.
잘 정규화된 모델은 데이터의 일관성을 지키기 쉽고 변경에 강하다. 다만 과도한 정규화는 조회 시 여러 개체를 결합해야 하는 부담을 키우므로, 성능이 중요한 영역에서는 일부 중복을 의도적으로 허용하는 역정규화를 검토한다.
무결성과 성능 사이의 균형 판단이 설계자의 역량이다.
클래스 다이어그램과의 관계
개체관계도는 데이터의 구조에 집중하는 반면, UML의 클래스 다이어그램은 데이터와 함께 그 데이터를 다루는 행위까지 담는다. 두 모델은 표현 대상이 겹치면서도 관점이 다르다.
개체관계도가 데이터베이스 설계를 향한다면, 클래스 다이어그램은 객체지향 코드 구조를 향한다. 실무에서는 데이터 중심의 시스템에서 개체관계도를 먼저 확정하고, 이를 토대로 클래스 구조를 도출하는 경우가 많다.
두 모델이 서로 어긋나지 않도록 일관성을 유지하는 것이 설계의 품질을 좌우한다.
작성과 활용의 유의점
개체관계도를 작성할 때 가장 경계할 점은 개체와 속성을 혼동하는 것이다. 독립적으로 관리되고 다른 개체와 관계를 맺어야 할 대상을 단순 속성으로 묻어 두면 나중에 구조를 크게 손봐야 한다.
또한 관계의 카디널리티와 참여 여부를 모호하게 두면 구현 단계에서 해석이 갈린다. 모델은 한 번 그리고 끝나는 산출물이 아니라, 업무 변화에 따라 갱신되는 살아 있는 문서로 관리해야 한다.
실제 데이터와 모델이 어긋나기 시작하면 모델은 신뢰를 잃고 방치되기 때문이다.
관련 용어