내가 만들고자 하는 앱, 서비스가 어떤 테이블이 필요한지를 찾아내는 작업, 데이터 모델링에 대해서 알아보자.
✏️ 학습내용 정리
#관계를 찾아라(행위)
모델링을 하기 위해서 가장 중요한 작업 첫 번째는 행위를 기준으로 관계를 찾는 것이다.
행위 주체자(Actor)를 찾고 그것을 기준으로 뻗어나가면서 내가 필요한 데이터 테이블이 무엇인지 찾아보는 작업이 곧 데이터베이스 모델링의 첫 단계가 될 것이다.
그렇다고 모든 행위를 다 집중하는 것은 아니다. 데이터에 저장할 것들에 대해서만 다룬다.
때문에 유스케이스와 비슷하지만 다른 점을 잘 인식하고 모델링을해야 한다.
💡 데이터 모델링과 유스케이스의 차이
유스케이스: 액터당 행위를 위주로 생각함 (조회, 삭제 등 모든 것) 모델링: 행위 중에서 저장할 것들을 선별함 (새로운 데이터를 늘리는 것에만 관심가진다. 삭제같은 것은 포함x)
모델링을 할 때는 행위(~하다)의 형태인 것이 맞는지와 그 행위를 통해 저장할 데이터가 생기는 것이 맞는지를 확인해야 한다.
#모델링의 프로레스(3단계)
구체적으로 모델링을 하기위한 프로세스는 3단계가 있다.
모델링의 프로세스(3단계)
개념설계(ER-D) ▶ 논리설계▶ 물리설계
첫 단계인 개념설계(ER-D)에 대해서 먼저 알아보자.
#1단계: 개념설계
개념설계에서 알아두어야 할 단어는 Entity와 Relation이다.
구체적으로 Entity와 Relation은 어떤 의미를 가질까?
💡 Entity와 Relation이란?
실체(Entity): 역할자와 대상을 포함한다. 역할자는 관계를 형성하는 주체이다. 따라서 어떤 행위가 없어도 스스로 존재한다. 하지만 대상은 역할자와 행위 사이에 존재하는 것이다. 따라서 대상은 스스로 존재할 수 없다.
관계(Relation): 역할자가 하는 행위와 관련된 것이다. 역할자와 대상 사이를 연결해준다.
때문에 먼저 Entity를 그림으로 쭉 그리고 Entity들 끼리의 관계를 그려가면서 산출물로 남기는 작업이 필요하게 되는데,
이때 사용되는 것이 ER-D(Entity Relation Diagram)이다.
앞서 언급했지만, 여기서는 다 데이터 저장의 필요성을 기준으로 생각한다.
데이터를 늘리는 액션이 있으면 다 포함한다.
#2단계: 논리설계
개념설계를 통해 추상적인 것들에 대한 내용을 실체와 실체의 행위를 기준으로 한 관계를 파악했다면,
논리설계 단계에서는 개념설계를 통해 파악한 내용을 실제 테이블 형태로 만드는 과정이다.
테이블을 만들 때에는 Entity에게 필요한 속성을 컬럼명으로 만들어서 지정한다.
또한 이 단계에서 역할자 Entity와 대상 Entity간에 행위 Relation를 [1:1], [1:N], [M:N]의 관점을 기준으로 정리하는데,
1:1, 1:N, M:N의 관계에서 컬럼을 추가할 때는 새로운 테이블을 만들거나
혹은 관계가 있는 테이블 안에서 열이 추가될 지를 고려해야 한다.
💡 4형식 (포함, 배정의 의미) 일 때는 식별키가 3개가 된다.
포함, 배정의 의미를 가질 때는 하나의 테이블에서 식별해야 할 키가 2개가 필요하다. 직원 id와 메뉴 id 2개 해서 총 3개의 복합키가 사용되어야 한다. 출처: 뉴렉처(https://www.youtube.com/@newlec1)
[1:N]관계를 가지는 Entity들 간에는 N쪽의 관계를 가지는 테이블에 행위를 통해서 생기는 데이터들의 속성을 집어넣는다.
[M:N] 관계를 가지는 Entity들 간에는 별도의 테이블을 따로 만들어서 정리한다.
💡 행위 테이블(Action Table)
Entity들 사이에 행위를 기준으로 관계를 이어줬을 때, 이 행위를 통해서 새로운 데이터가 생기는 경우 Entity들 끼리의 관계에 따라서(M:N) 새로운 테이블이 생기기도 하는데, 이때 새롭게 생기는 이 테이블을 행위 테이블이라고 한다. 행위 테이블에는 이름 그대로 행위를 통해서 일어나는 정보들이 쌓이게 된다.
(EX) 회원이 상품을 주문한다.
이때 주문을 하는 관계를 중심으로 회원 테이블과 상품 테이블은 M:N관계를 갖는다. 따라서 한 번 주문을 하는 행위에 따라서 회원 테이블의 특정 컬럼에 값이 무더기로 들어가야 하는 상황이 생기게 되는데(상품 목록 여러개 와다다..) 이럴 경우에 데이터를 제대로 식별할 수 없는 문제가 생기게 되기 때문에 별도의 테이블이 필요하게 된다.
그래서 이대 주문이라는 행위를 기준으로 테이블을 추가로 만들게 되는데 이 주문 테이블이 곧 행위 테이블이다. 행위 테이블에는 주문이라는 행위를 통해서 생기는 정보들(주문일자, 주문상품, 주문내용 등..)이 속성 곧 컬럼으로 들어간다.
이때 1:N이든 M:N이든 추가해야 할 속성 중에 외래키(FK)가 포함된다는 점을 잘 기억하자!
#3단계: 물리설계
논리설계를 통해 실제 테이블을 그려보았다면
물리설계 단계에서는 특정 DBMS를 지정해서 실제 내용이 추가되는 과정이다.
(실제로 레코드를 추가하는 것)
물리설계 단계에서 헤매지 않으려면 개념설계부터 찬찬히.. 단계를 잘 밟아나가는 것이 중요하다.