데이터베이스를 다루는 과정에서 한 번쯤은 들어봤을 ERD.
이번 게시글에서는 ERD에 대해 다뤄보자.
ERD
' Entity Relationship Diagram '
흔히 E-R 다이어그램이라고 불리우며 ERD 라고 줄여 부르기도 한다.
영어 약자 그대로 '존재하고 있는 것(Entity)들의 관계(Relationship)을 나타낸 도표(Diagram)' 이다.
여기서 말하는 존재하고 있는 것이란 데이터를 뜻하니 데이터들의 관계를 나타낸 도표인 셈이다.
그럼 데이터의 관계를 어떻게 나타내는지 그림들을 참고해 이해해보자.
먼저 ERD의 규칙을 살펴보면 아래와 같다.
A는 부모, B는 자식의 관계를 가진 ERD이다. 여기서 '~B로 구성되어 있다'라는 말이 살짝 헷갈릴 수 있다.
이를 풀어 설명해주면 '~B를 포함하고 있다' 라고 이해하면 될 것 같다.
그리고 부모와 자식의 관계를 알아야 하는데 A 테이블의 기본키를 B 테이블이 가지고 있다면
A테이블이 부모 테이블, B테이블이 자식 테이블을 뜻한다.
또한 그림에는 없지만 점선과 실선으로 관계를 구분하는데
실선은 부모 테이블의 기본키를 자식 테이블이 가지고 있으며 이를 기본키로 사용하는 경우이고
점선은 부모 테이블의 기본키를 자식테이블이 가지고 있지만 이를 기본키로 사용하지 않을 때 사용한다.
이게 무슨말인가 하니 아래의 그림을 예로 들어 설명해 보겠다.
위의 학생 테이블과 수강내역 테이블과의 관계를 나타낸 ERD를 예로 들어보겠다.
먼저 부모 테이블과 자식 테이블이 누구인지 알아내야 하는데 수강내역 테이블이 학생 테이블의 기본키를 외래키로 가지고 있으니
수강내역 테이블이 자식 테이블, 학생 테이블이 부모 테이블임을 알 수 있다.
다음으로 테이블 간의 관계를 보면 학생 테이블 쪽의
는 1을 뜻하기 때문에 '하나의 학생',
수강내역 테이블 쪽의
는 0~N 을 뜻하기 때문에 '0~N 개의 수강내역'을 뜻한다.
이는 학생의 입장에서는 '하나의 학생은 0~N 개의 수강내역을 가진다',
수강내역의 입장에서는 '0~N 개의 수강내역은 하나의 학생에게 포함되어 진다'라는 해석이 가능하다.
그리고 수강내역 테이블에서 학생 테이블의 기본키를 자신도 기본키로 사용하기 때문에 실선으로 표현되어 있음을 알 수 있다.
이러한 모든걸 유추해 이 ERD를 해석해 보자면
- 부모 테이블은 학생 테이블이다.
- 자식 테이블은 수강내역 테이블이다.
- 부모 테이블의 PK를 자식 테이블에서 PK로 사용하고 있다.
- 학생 한 명은 0~N 개의 수강내역을 가진다.
- 수강내역은 하나의 학생을 가진다.
- 수강내역 테이블은 학생 테이블의 PK인 [ 학생ID ]를 FK로 가진다.
아직 이해가 덜 됐을 수도 있으니 아래의 그림을 참고해 한 번 더 살펴보자.
부서 테이블과 사원 테이블을 예로 든 그림이다.
이전 예제와 달리 점선으로 관계를 표현한걸 보니 사원 테이블은
부서 테이블의 기본키를 가지고 있지만 이를 기본키로 사용하지는 않음을 알 수 있다.
이 ERD를 이전 예제와 똑같은 방법으로 해석하면 다음과 같다.
- 부모 테이블은 부서 테이블이다.
- 자식 테이블은 사원 테이블이다.
- 자식 테이블이 부모 테이블의 PK를 가지고 있지만 이를 PK로 사용하지는 않는다.
- 하나의 부서는 0~N 명의 사원을 가질 수 있다.
- 사원 테이블은 부서 테이블의 PK인 부서번호를 FK로 가진다.
예로 든 것들을 봐도 알 수 있듯이, 기본키를 누가 갖고 있는가? 누가 외래키를 갖고 있는가?
누가 어디에게 종속되고 누가 누구를 포함하고 있는가 등의 관계를 표현 해냈음을 알 수 있다.
이것이 ERD이며 데이터베이스를 다루는 업종이라면 필수적으로 이해해야할 부분이기도 하다.
추가로 ERD는 IE표기법과 Barker표기법이 있는데 이에 대해 간단하게 표로 덧붙이며 게시글을 마친다.
[출처] https://mjn5027.tistory.com/43
'Others > 데이터베이스' 카테고리의 다른 글
Redis GUI 클라이언트, Medis 설치하기 (0) | 2022.05.03 |
---|---|
JOIN 완전 정리 (INNER JOIN, OUTER JOIN, LEFT JOIN, RIGHT JOIN) (0) | 2021.11.05 |
[Mysql/Mac] root 비밀번호 분실 시 초기화 (0) | 2021.10.14 |
[ORACLE] ORA-01031: insufficient privileges (0) | 2021.01.25 |
SQLDeveloper 오류: Locale not recoginized (0) | 2021.01.25 |