개체-관계 모델
데이터 모델링 분야에서 개체-관계 모델이란 구조화된 데이터에 대한 일련의 표현이다.
"구조"화된 데이터를 저장하기 위해 데이터베이스를 쓴다. 이 데이터의 "구조" 및 그에 수반한 제약 조건들은 다양한 기법에 의해 설계될 수 있다. 그 기법 중 하나가 개체-관계 모델링(Entity-Relationship Modelling)이다. 줄여서 ERM이라고 한다. ERM 프로세스의 산출물을 가리켜 개체-관계 다이어그램(Entity-Relationship Diagram)이라 한다. 줄여서 ERD라 일컫는다. 데이터 모델링 과정은 데이터 모델을 그림으로 표현하기 위해 표시법을 필요로 한다. ERD는 개념적 데이터 모델 혹은 시맨틱 데이터 모델의 한 타입이다.
정보 시스템을 디자인 해나가는 데에 위와 같은 모델들을 사용하여 시스템이 필요로 하는 정보를 기술한다든가 데이터베이스에 저장되어야 할 정보의 타입(type)이 무엇인가 분석해 나갈 수 있다. 특히 요구사항 단계에서 말이다.
어떤 도메인 오브 디스코스(관심 대상이 되는 부분)의 온톨로지를 기술할 때, 데이터 모델링 테크닉이 사용될 수 있다. (사용된 텀들(terms)과 그들과의 관계를 정의하고 분류하는 일이다.) 데이터베이스에 기반한 정보 시스템(information system)을 디자인하고자 하는 경우에는 나중에 가서는(논리 설계 단계) 개념 데이터 모델은 논리적 데이터 모델로 맵핑된다. 논리적 데이터 모델은 관계형 모델 같은 것이다; 뒤이어 논리적 데이터 모델은 물리 설계 단계에서 물리적 디자인 모델로 다시 맵핑된다. 단, 이와 같은 단계를 모두 뭉뚱그려 "물리 설계"라고 일컫기도 한다.
개체-관계 다이어그램(ERD)를 그리는 데에는 수많은 관습/방법(convention)이 존재한다. ERD를 그리는 데 아주 고전적인 방법이 이 문서의 아래에 기술되어 있다. 아래 기술된 방법은 개념 모델링과 주로 연관되어 있다.
데이터베이스 논리설계 및 물리설계 단계에서는 관습적으로 쓰이는 노테이션(notation)들이 몇 가지 더 있다. 예를 들면 인포메이션 엔지니어링, IDEF1X (ICAM DEFinition Language), 디멘저널 모델링 같은 것들이다.
개체(엔티티)는 분리된 물체 하나를 표현한다. 엔티티는 명사 하나에 해당한다고 생각하면 쉽다. 예를 들면 다음과 같다: 컴퓨터(1개), 사람(1명), 악곡(1개), 수학적 정리(1개). 엔티티는 사각형으로 표시된다.
관계(릴레이션쉽)는 두 개 이상의 엔티티들이 어떻게 서로 연관되어 있나를 기록한다. 예를 들면 다음과 같다: 회사와 컴퓨터 사이의 "소유하다"라는 관계, 상사와 부하 직원 사이의 "감독하다"라는 관계, 연주자와 악곡 사이의 "연주"라는 관계, 수학자와 수학 정리 사이의 "증명했다"라는 관계 등이다. 관계는 다이아몬드형으로 그리는데, 관계된 엔티티와는 실선으로 연결한다.
엔티티도 애트리뷰트를 가질 수 있고, 관계도 애트리뷰트를 가질 수 있다. 예를 들면 다음과 같다: employee인 엔티티는 생년월일(SSN) 애트리뷰트를 가질 수 있다; "proved" 관계는 "날짜(date)" 애트리뷰트를 가질 수 있다. 애트리뷰트는 엔티티 집합이나 관계 집합에 선으로 연결시킨 타원형들로 그린다.
모든 엔티티(위크 엔티티가 아닌 한)는 "고유하게 식별되는" 애트리뷰트 집합을 가지고 있어야 한다. 최소한의 고유 식별 애트리뷰트 집합은 엔티티의 기본 키(Primary Key)라 불린다.
개체-관계 다이어그램은 하나의(single) 엔티티를 보여주고 있거나 하나의(single) 관계 인스턴스를 보여주고 있는 것은 아니다. 사각형은 "엔티티 집합들"을 나타내고 있는 것이고, 다이아몬드형은 "관계 집합들"을 보여주고 있는 것이다. 예를 들면 다음과 같다: 특정한 악곡은 하나의 엔티티이다. 하나의 데이터베이스 안의 모든 악곡들의 모음은 하나의 엔티티 집합이다. 한 아이와 그 아이의 점심 도시락 사이의 "먹어치움" 관계는 하나의(single) 관계이다. 하나의 데이터베이스 안의 모든 그러한 아이-점심 도시락 관계는 관계 집합이다.
실선은 관련된 엔티티 집합과 관계 집합 사이에 그린다. 엔티티 집합의 모든 엔티티가 관계에 참여(participate)하고 있을 때, 선을 굵게(thick) 그리거나 이중선(double) 으로 그린다. 이것을 파티시페이션 콘스트레인트라고 부른다. 엔티티 집합 내의 각각의 엔티티가 관계 집합 내의 최대 한 개의 관계에 참여할 수 있을 때, 엔티티 집합에서 관계 집합 쪽으로 화살표를 하나 그려준다. 이것을 키 콘스트레인트라고 부른다. 엔티티 집합 내의 모든 엔티티가 각각 하나씩의 관계에 정확히 대응될 때는 화살표를 굵게(thick) 그린다.
다대다(many-to-many) 관계를 기술할 때는 어소시에이티브 엔티티를 사용할 수 있다.
.
단일 테이블의 행 사이의 관계를 기술하기 위해 단방향 관계(Unary Relationships)를 사용할 수도 있다.
ER 모델링에서 어떤 기호들은 그렇게 자주 사용되지 않는다. 모델러들은 이러한 기호들을 종종 기피한다.
엔티티는 "스트롱(strong)" 엔티티일 수도 있고 "위크(weak)" 엔티티일 수도 있다.
ER 모델링에서 애트리뷰트들은 다치(multi-valued) 애트리뷰트일 수도, 합성(composite) 애트리뷰트일 수도 혹은 종속(derived) 애트리뷰트일 수 도 있다:
때때로 어떤 두 엔티티가 더 일반적인 분류의 엔티티의 하위 분류일 경우가 있을 수 있다. 예를 들면, 소프트웨어 기업의 피고용인 엔티티는 프로그래머 엔티티일 수 있고 마케터 엔티티일 수 있다. 위와 같은 경우, ISA라는 말을 안에 써 넣은 삼각형으로 표시한다. 수퍼클래스는 위쪽에 그리고 다른 두 개(혹은 그 이상)의 서브클래스들은 밑변쪽(아래쪽)에 그린다.
어떤 한 개의 관계와 그것과 엮인 엔티티 집합들은 다시 단일 엔티티 집합으로 간주될 수 있다. 이것을 어그리게이션이라 하는데, 다른 관계와 엮을려는 목적이다. 어그리게이션은 어그리게이트된 모든 개체와 관계를 둘러싼 점선 사각형으로 표시된다.
크로우즈 풋/크로우즈 핏() 노테이션에서는, 엔티티 사이의 관계를 기본적으로 엔티티를 연결하는 선으로 나타낸다. 또한 관계의 카디널리티를 나타내는 기호들을 그 선의 양끝에 표시한다.
카디널리티를 나타내는 기호들은 다음과 같은 것들이 있다:위와 같은 기호들은 서로 조합하여 사용될 수 있다. 다음과 같은 네 가지 조합이 가능하다.크로우즈 핏(crow's feet) 노테이션의 예제는 오른쪽 그림을 참조하라.
오른쪽 그림에서, 우리는 다음과 같은 사실을 알 수 있다:
크로우즈 핏 노테이션은 오라클 데이터베이스 텍스트에서 널리 쓰이고 있다. 또한 마이크로소프트 비지오, 파워디자이너, 다이어 (소프트웨어) 등의 틀에서 쓰이고 있다.피터 첸이 지은 이 논문은 컴퓨터 과학 분야에서 가장 많이 인용되는 논문이다. 1000여 명의 컴퓨터 과학과 교수 설문 결과 "가장 영향력 있는" 논문으로 꼽혔다. 인용 논문의 목록은 DBLP: http://dblp.uni-trier.de/  등지에서 볼 수 있다.