새소식

데이터 모델링

관계형 데이터 모델링(논리적 데이터 모델링)

  • -
728x90

## 생활코딩 강의를 정리하며 관계형 데이터 모델링에 대해 공부합니다.

 

관계형 데이터 모델링

 

www.youtube.com

 

지난 강의에서 개념적 데이터 모델링을 실제로 진행해보았다. 엔티티를 정의하고, 속성을 정의하고, 식별자를 지정하고, 엔티티간 Relationship을 만들어 ERD를 직접 그려보았다.

 

이번 시간에는 논리적 데이터 모델링을 실습해본다.

 

게념적 모델링이 업무에서 개념을 뽑아내는 일이라면 논리적 데이터 모델링은 그렇게 뽑아낸 개념을 관계형 데이터베이스 패러다임에 어울리에 데이터 형식을 정리정돈 하는 것이다.

이 과정에서는 DB제품의 특성, 성능은 크게 신경쓰지 않는다.

 

Mapping Rule

개념적 데이터 모델에서 논리적 데이터 모델로 전환하기 위한 하나의 방법론으로, 더 많은 것을 더 빠짐없이 처리할 수 있게 해 준다

ER Master

관계형 데이터 모델을 그리는 도구로 오픈소스 플러그인으로 이클립스에서 사용할 수 있다.

https://ermaster.sourceforge.net/

 

ER Master

 

ermaster.sourceforge.net

 

1. 테이블과 컬럼 생성

Mapping Rule 에 따라서 작업을 시작하면, 가장 먼저 해야 할 것은 엔티티를 테이블로 바꾸어주는 것.

 

테이블은 Foreign Key가 없는 것들이 먼저 작업하기가 쉽다.

 

나는 ERDCloud를 사용해서 진행해본다.

https://www.erdcloud.com/

 

ERDCloud

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

www.erdcloud.com

 

테이블을 하나 생성하고, 논리 이름에 저자, 물리 이름에 author로 저장한다.

노란색 +를 누르면 Primary Key 를 생성할 수 있다.

저자 아이디(id)를 PK로 하므로 작성하고, 타입은 정수인 int, null 값은 허용하지 않는다.

도메인은 해당 클럼에 들어갈 수 있는 값,범위를 지정하는 것으로, 0,1을 적으면 0과 1만 들어갈 수 있는 칸이라는 말이 된다.

 

앞서 그린 개념적 데이터 모델링 엔티티를 태이블로 옮겨보면 아래와 같이 만들 수 있다.

 

2. Relationship 처리

2-1. 1:1처리

앞서 그린 개념적 데이터 모델링에는 1:1 관계가 없으므로, 휴면일 속성을 가진 휴면자 엔티티를 추가해서 공부해본다.

 

1:N 관계에서는 1 쪽이 보통 PK를 갖는데, 1:1 관계 에서는 누가 PK, 누가 FK를 갖는지 헷갈릴 수 있음.

 

이 때 어떤 테이블이 다른 테이블에 종속적인가를 판단해 보면 된다.

휴면저자는 저자가 누군지 알아야 값을 가질 수 있지만 저자는 휴면저자가 누군지 몰라도 스스로 값을 가질 수 있다.

이를 휴면저자가 저자에게 의존하고 있다고 하고, 이 때 저자는 부모테이블, 휴면저자는 자식테이블 이라고 할 수 있다.

 

이 경우 휴면저자에 FK를 설정하면 무리없이 동작시킬 수 있다.

 

휴면저자는 저자에게 optional 한 존재이므로, 반영하여 표현하면 그림과 같다.

 

2-2. 1:N 관계 처리

저자와 댓글이 1:N 관계,  글과 댓글도 1:N 관계.

이를 표로 표현하면, Comment에 어떤 author가 썼고, 어떤 topic에 속해있는지에 대한 정보가 필요하다.

컬럼으로 topic_id, author_id를 추가해준다.

ERD Cloud 에서는 Relationship을 연결하면 저절로 FK가 생성이 된다.

댓글은 optional 이므로 0이 포함된 새발을 쓴다.

 

2-3. N:M 관계 처리

우리가 그린 모델링에서 하나의 글을 여러저자가 편집할 수 있고, 한 저자가 여러 글을 편집할 수 있기 때문에 글과 저자의 관계는 N:M이 된다.

 

이를 처리하는 방법을 알아본다.

예시를 설정하면 더 생각하기가 편리하다.

위와 같이 3명의 저자가 있고, 3개의 글이 있을 때,

MYSQL 글과 SQL SERVER 글을 kim 과 lee 가 작성했고, ORACLE은 kim이 작성했다고 해보자.

 

먼저 topic 에 author_id 를 FK로 가져와본다.

문제가 있다.

author_id는 DB에 들어갈 데이터로 2개의 값을 동시에 가질 수 없다.

 

반대로 author 에 topic_id를 FK로 가져와도 마찬가지로 같은 문제가 생긴다.

 

N:M 관계는 Mapping Table(연결테이블) 을 추가하여 구현한다.

author와 topic의 키를 가져와 누가 어떤 글을 편집했는지를 기록하는 write라는 이름의 테이블을 추가한다.

이와 같이 N:M 관계를 구현하기 위해 만들어주는 테이블을 Mapping Table이라고 한다.

 

개념적 데이터 모델에는 N:M으로 relationship을 표현해 준것으로 충분하며,

논리적 데이터 모델에는 매핑테이블을 추가하여 표현해준다.

강의에서는 매핑테이블에 FK를 PK로 지정하였는데, ERDCloud에서는 어떻게 하는지 모르겠다.

Contents
  • -

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.