본문 바로가기

👩‍💻 BackEnd/📊데이터베이스 [Database]

[ SQL / DB ] ERD Cloud 작성하기 : 식별 관계와 비식별 관계, 관계차수

개인 프로젝트 ERD 를 그리는 중이다.

하나씩 그려보려고 하니까 왜 그런지 이유들이 점점 궁금해져서 시간이 너무 오래걸린다. 

그래도 확실하게 공부하고 정리해두기 위해 글을 써본다! 

 

가장 먼저 부딪힌 문제는 식별 관계인가 비식별 관계인가. 

지금 현재 나는 DBeaver 라는 프로그램을 사용하고 있는데 

DBeaver 엔티티 관계도

 

DBeaver 는 엔티티 관계도 기능을 제공하지만 모두 점선으로 나타나 있고, 관계차수가 잘 드러나지 않는 엔티티 관계도인 것 같다. 

 

ERD를 참고할 수 있는 정보가 있는 ERD Cloud 에 들어가서 다른 ERD 들을 구경해보았다. 

 

ERDCloud

Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.

www.erdcloud.com

 

 

배민, 당근 등등의  ERD cloud 를 구경하며 식별 관계를 나타내는 실선을 발견했다. 

 

언제 실선이고, 언제 점섬을 그려야하지? 식별 관계와 비식별 관계 분명 공부했는데... 

 

확실하게 알고 ERD 를 그리기 위해 공부를 해야겠다는 생각이 들었다. 

 

즉, 실선인가 점선인가? 

 

우선, 그 차이를 알아보자 

 

식별 관계와 비식별 관계 

 

 

식별관계 (실선으로 표현) : 

  • 부모 테이블의 PK(기본키) 를 자식 테이블의 PK(기본키) 로 사용하는 경우 
  • 부모 테이블의 PK(기본키) 가 자식 테이블의 FK(외래키) 가 되는 경우
  • 부모가 있어야 자식이 생기는 경우 

비식별관계 (점선으로 표현) : 

  • 부모 테이블의 PK(기본키) 를 자식 테이블이 갖고 있으나 PK(기본키) 로 사용하지 않는 경우
  • 부모테이블의 PK(기본키) 가 자식테이블의 일반 속성이 되는 경우
  • 부모가 없어도 자식이 생기는 경우 

생각해봤을 때 나의 개인 프로젝트에서는 각각 Auto_increment 로 id 값을 갖고 있고, 

다른 테이블의 PK 를 가져와 FK 로 선언하는 일이 아직까진 없다.

 

즉, 개인 프로젝트에서는 모두 비식별 관계이다. 

 

따라서 내 ERD 는 모두 점선으로 표현하면 된다. 

 


관계차수 설정 (카디널리티)

 

관계차수란, 두 엔티티 간의 관계에서 각 엔티티가 다른 엔티티와 얼마나 많은 관계를 가질 수 있는지를 나타내는 것을 말한다. 

 

간단히 말해서 연관관계를 의미한다. 

 

1:1 , 1:N, N:M 을 나타내는 것이라고 생각하면 편하다. 

 

기호 의미  비고
| 하나일수도  
O 없을수도  
많을수도  

 

이렇게 생각을 하고 그리면 조금 이해가 쉽게 가는 것 같다. 

 

예를들어 한 사람(User)는 게시물(image)를 여러개 업로드할 수 있지만,

하나의 게시물(image)은 여러 사람(User)에 의해서 업로드될 수는 없다. 

 

따라서 사람과 게시물간의 관계는 1 대 N 이라고 생각하면 된다. 

 

 


 

 

 

영차영차 그렇게 완성된 ERD 는 다음과 같다. 

 

 

 

 

참고 : not null, null 허용 설정하는 방법

 

엄청 간단한데 혼자 못찾은 사람 누구야... 나다

 

1. 오른쪽 위 톱니바퀴 설정 버튼을 눌러 들어간다. 

 

2. 설정에서 Display(디스플레이) 분에 표시할 항목들을 설정할 수 있다. 

 

 

3. 헷갈렸지만 검정색으로 색칠된 게 체크가 된 것이다. (나는 하얀색이 체크된건 줄 알았다)

  • null 허용 체크 

4. 저장 버튼 클릭 (나는 저장버튼도 찾지 못했었다. 화면 밖에 숨어있었음. ) 

 

5. 끝 

 


📄 참고자료 : 

 

 

ERD 작성법 : 기호(Cardinality)와 선(Realationship) 정리

프로젝트 Readme를 쓰기위해 ERD명세서를 만들고 있다. ERD명세서는 기획단계에서 한번, 최종 발표 전 한 번, 그리고 지금, 3번째 만드는 중인데, 그릴 때 마다 매번 헷갈린다. 그리고 매번 그릴때마

dogfoot-er.tistory.com