출처: https://lifreeblog.tistory.com/70
ER 모델 표기법을 이해하기 위해서는 먼저 'ER 모델'을 알아야 한다. Entity Relationship 모델은 1976년 피터 첸이 제안한 개념적 모델링을 위한 방법론이다. 세상의 사물을 개체entity와 개체 간의 관계relationship으로 표현한다. 개체는 개체의 특성을 나타내는 속성attribute를 가지며 이를 이용해 개체를 식별한다.
ER 모델 표기법은 개체간의 관계를 표현하는 표기법이며, ER다이어그램 이라는 방법으로 표기할 수 있다.
하지만, 실무에서 관계도를 표현하는 대표적인 방법은 IE 표기법information Engineering Notation이다. IE표기법은 관계를 나타내는 선의 끝 모양이 새의 발 모양처럼 생겼다해서 새발 표기법crow-feet이라고도 부른다고 한다.
개체와 속성
개체와 속성을 조금 더 자세히 알아보자.
개체와 속성을 익숙한 말로 풀어보자면,
- 개체는 테이블의 이름
- 속성은 테이블의 컬럼
이라고 할 수 있다.
개체는 강한 개체와 약한 개체가 있다.
- 강한 개체는 '혼자서 존재할 수 있는 개체'다. 강한 개체는 자기가 가진 속성만으로 다른 개체와 식별(구분)할 수 있다.
- 약한 개체는 '강한 개체에 의존하는 개체'다. 약한 개체가 가진 속성만으로는 다른 개체와 식별할 수 없기 때문에, 강한 개체의 속성을 '상속'받아 주식별자로 활용한다.
Ex) [직원]과 [가족]이라는 개체가 <부양>이라는 관계를 맺고 있다고 가정하자.
각 개체는 다음의 속성을 갖는다.
- [직원] : 직원번호, 이름, 직책
- [가족] : 이름, 관계
이때, [가족]은 약한개체타입이다.
왜냐하면 [직원]이 <부양>하지 않으면 [가족]은 존재할 수 없기 때문이다. 조금더 ER모델스럽게 말하자면 [가족]개체는 [직원]개체의 속성 중 '직원번호'가 없이는 스스로를 식별(구분)할 수 없게 된다. [가족]의 '이름'이나 '관계' 속성은 중복의 여지가 있기 때문이다(유니크하지 않아, PK로 적절치 않음).
ER 다이어그램으로 표시
- 개체는 직사각형으로 표시하며, 약한 개체 [가족] 인 경우 이중 직사각형으로 표시
- 속성은 타원으로 표시하며,
강한 개체의 키(PK)는 실선으로 밑줄을 그음
약한 개체의 식별자(키 라고 하지 않는다.)는 점선으로 밑줄을 그음
- 직원 한 명이 가족 여러명을 부양할 수 있으므로 1:N 관계를 표시한다.
- 강한 개체 타입과 약한 개체 타입의 관계를 나타낼 때는 관계를 이중 마름모[부양]로 표현한다.
IE 표기법
위의 내용을 IE표기법으로 표시할 때, 두 가지가 변경된다.
- 개체 타입에 상관없이 직사각형으로 표시한다.
- 관계는 마름모 대신, 여러 모양의 '선'으로 표시한다.
기호 | 의미 |
------------------ | - 강한 개체 타입간의 관계 = 비식별자 관계 (약한 개체의 구분자를 "식별자"라고 한다. 식별자가 없는 관계) - 부모 개체의 키가 일반 속성(FK)으로 포함되는 관계 |
- 강한 개체와 약한 개체 타입간의 관계 = 식별자 관계 - 부모 개체의 키가 주 식별자(약한 개체의 PK)로 포함되는 관계 |
|
- 1:N 관계, N쪽에 새 발 표시 | |
- 0(선택참여), 최소참여가 0일 경우 : 관계가 있을 수도 없을 수도 있음 | |
- 1(필수참여), 최소참여가 1일 경우 : 관계가 무조건 일어남 |
- 실선을 사용했으므로, [가족], [직원] 개체 관계는 '직원번호' 키를 주 식별자로 사용하는 강한 개체와 약한 개체 관계라는 것을 알 수 있다.
- [가족] 쪽에 새발 표시가 있으므로 직원 1명이 가족 N명을 부양하는 1:N 관계이다.
- [가족] 쪽에 0 표시가 있으므로,
[직원]이 [가족]과 관계를 가질 수도 있고, 아닐 수도 있다. 즉 부양가족이 없는 직원이 존재할 수 있다.
(0 또는 1 표시와 반대쪽에 있는 개체를 주어, 다른 개체를 목적어로 설정하면 편함)
- [직원] 쪽에 1 표시가 있으므로, [직원]이 없는 [가족]은 있을 수 없다.
참고: SQL Server로 배우는 데이터베이스 개론과 실습 2판(박우창, 남송휘, 이현룡/ 한빛아카데미)
출처: https://lifreeblog.tistory.com/70 [루시드 코딩:티스토리]
'프로그램 개발(분석, 설계, 코딩, 배포) > 설계' 카테고리의 다른 글
설계_UML (0) | 2022.12.09 |
---|---|
개발 방법론_UML (0) | 2022.12.09 |