JS FULL STACK 2장 , 관계형 데이터모델링(업무파악,개념적 데이터 모델링)
공부한이유
강사님께서 본격적으로 sql에 입문하기에 앞서 관계형데이터모델링에대한 영상을 선행 시청하고오라고하셨다.
본 강의는 관계형 데이터베이스의 테이블을 설계하는 방법에대한 수업으로
관계형 데이터베이스에 대한 선행지식 (테이블 생성,조회,수정,삭제,join)을 알고있어야 한다.
나는 기본적인 테이블 생성 ,조회 ,수정,삭제,join에 대한 내용을 전공과목에서 이미 기본적인 부분은 공부해둔적이있어서 문제가없었다.
이전 1장에서 올렸던 얄팍한코딩사전같은 Youtube처럼 다양한 공개자료들이 많기 때문에 공부하는데 얼마걸리지않으니 찾아보면서 금방 익힐수 있을것이다.
관계형 데이터 모델링
www.youtube.com
데이터모델링 진행순서
1. 업무파악
우리가 하려는일은 무엇인지? 일을 의뢰한 사람 - 개발자의 협력 단계에서 일을 의뢰한사람이 원하는 목적을 파악하는것
산출물: 기획서(UI그림)
2.개념적 데이터모델링
업무 파악이 되고나면 현실의 업무들을 분리시켜서 개념을찾는단계 - 하고자하는일에 존재하는 개념 찾고 개념들의 상호작용을 심사숙고하는시간
산출물 : E-R 다이어그램
3.논리적 데이터모델링
개념숙고가 이루어졌다면 개념을 관계형데이터베이스에 맞게 구성해야한다.
산출물: 논리적 E-R 다이어그램
4.물리적 데이터모델링
원하는 데이터베이스 제품을 선택 RDBMS(mysql,PostgreSQL), NoSQL(mongoDB)하고 해당 제품에 맞춤된 코드를 작성해 실제 표로만드는 과정
산출물: sql 코드(query)
즉 데이터모델링이란
현실의 문제를 공중분해 시켜서 고도의 추상화과정을거쳐 컴퓨터세상의 데이터베이스로 옮겨담는 작업이다.
(ex) 자신의 집을 만들고싶은사람이 레고블럭으로 원하는 집의모양을본따서 만들어준다음에 건축가에게보여주는것
원하는 문제를 모델화시켜두면 복잡한 문제들을 이해하고 사람들과 효과적으로 소통하며 문제를 예측하고 해결해나갈수있다.
1단계 업무파악 ProtoType (프로토타입)
ProtoType은 말그대로 만들려고하는 서비스의 본제품의 디자인이 어떻게 될것인지 확인하는용도이다.
AdobeXD , Figma , 카카오 오븐등 전용 디자인툴들이 수없이 존재하고있고
이러한 Prototype을 만드는 과정을 Prototyping(프로토타이핑)이라고하며
프로토타이핑에는 총 3단계가 존재한다.
툴들을 이용해 실제로 프로토타이핑을 진행하다보면 결국 한가지 프로토타입툴만으로는 완벽한 프로토타입을 만들어낼수없다는것을 느낄것이다. (각각 용도에 맞는 프로토타입툴을 선정할필요가있음)
그러나 나는 현재단계에서 디자인+인터렉션 완성본에 가까운 프로토타입을만들어낼정도의 단계까지 필요로하지않고
원하는 기능만을 그려보면서 설명하는 업무파악의 단계에 쳐해있는것이기에
가장 쉽고 좋은 프로토타이핑 툴인 Paper prototype방법을 선택해 기능을 정의해봤다.
자료조사하다가 찾은 좋은UI/UX 구성방법에대해 참조해보면 좋을거같은 글
좋은 UX와 아쉬운 UX - 인터파크 티켓으로 살펴보기 [코드스테이츠 PMB 10기]
코로나 이전에는 공연이나 페스티벌, 콘서트를 보러 정말 자주 다녔었다. 일명 피켓팅(피 터지는 티켓핑)을 하러 피씨방에 가는 일이 자주 있었다. 지인들 대신 티켓팅을 하기도 했었고 지금도
my-adventure-book.tistory.com
2단계 개념적 데이터모델링 Entity Relationship Diagram
- 현실의 개념을 추출하는 필터의기능
- 개념에 대해서 다른사람과 소통할 언어의기능
ERD(Entity Relationship Diagram) 제공하는것
1. 정보를 발견하고 표현하도록 도와줌(정보) 속성
2. 연관된 정보를 그룹으로 묶어 다른사람에게 표현할수있음(그룹)
3. 정보로묶인 그룹들간의 사이를 인식하고 표현할수있음(관계)
2-1. 먼저 기획서에서 흩어져있는 정보들을 추출해보자 == Entity(엔티티)
- 연관된 정보를 묶어주는 큰 덩어리 그룹부터 끄집어내보기(Entity)
1번:회원
2번:할일
이렇게 그룹화된 큰 덩어리들을 Entity(엔티티)라고한다.
관계형 데이터베이스 개념 다운 표를만들때 주의사항
1. RDB 관계형데이터베이스는 내포관계를 허용하지않는다.(표안에 표가들어갈수없음)
예시
2. 거대 단일테이블(표)로 만들면 중복이 발생해서 데이터가많아질경우 머리아파짐(회원1이 1억명 인데 회원1이름 1억개수정해야되면 머리아픔) and 이름이 똑같은 사람일수도있음
예시
2-2 관계형 데이터베이스 개념 다운 표를 만드는 방법 Attriubute 추출
그룹화된 하나의 큰덩어리인 Entity 에 따라서 테이블(표)를 쪼개야한다.
TODO UI 기획서를 보고 나온 큰 덩어리 두개 할일 , 회원을 각자의 표로 만들어 쪼개본다.
할일과 회원은 실제 데이터가아니다. 할일과 회원에게는 Attriubute(속성)이 존재한다.
사람이루는 주요 속성에 눈,코,입이 존재하듯 할일과 회원에게도 속성이존재한다.
TIP : 할일을 작성하는 UI 회원을 만드는 UI 쓰고 작성하는 UI를 보면 쉽게 속성을 찾을수 있다.
UI기획서를 보았을때 할일과 회원의 속성들을 쉽게 추출하기 어렵다.
위에서 작성된 Ui기획서는 읽기모드인상태나 마찬가지이고
실제로 작성하는 쓰기모드의 관점으로 화면을 다시그려본다면 Attriubute(속성)을 금방 추출할수있다.
Entity는 table(하나의표)로 전환된다.
Attriubute (표의 Column이된다.)
RDB에서는 join을 통해 원하는 내용을 포함해서 함께 출력할수있다.
Relation(관계) == 회원은 할일을 작성한다
Entity간에는 관계(Relation)를 분명히 갖게된다. 이것이 논리적 데이터모델링으로가서는 표에서는
Pk(Primary key:기본키)
FK(Foreign key:외래키)
로 관계가 표현되게된다.
2단계 개념적 데이터모델링 총 정리
UI 변동사항
Attribute(속성)데이터에 따라서 UI에 변동사항이 생길수도있다.
요구사항 추가 시나리오 1: 회원엔티티에 대한 요구사항으로 수정,삭제 할 수 있는 기능이 추가
=>
그렇다면 UI도 이에따라 새롭게 변동사항을 수정해주어야한다.
예시1
사용자가 할일목록을 실제로 완료버튼 혹은 삭제버튼을 눌러서 사라지게될경우를 대비해서 완료목록 , 삭제목록을 추가할거나
수정하였을때 수정된 목록사항들을 따로만들어둘순 있지만
지금은 모든 기능을 간단하게 최소화 시킬것이라서 이러한 기능과 해당 속성들은 포함시키지는 않도록할것이다.
요구사항 추가 시나리오 2: 할일 기능은 로그인 후 사용할 수 있다, 반드시 로그인이 되있어야한다. 할일을 등록했을때만 수정,삭제가 가능하다.
=>
로그인 하지 않을경우에는 로그인 및 회원가입 창을 먼저 띄워주어야할것같다. 해당 UI를 만들기.
기획서를 만들다보니 비밀번호가 존재하는데 비밀번호를 까먹은 사람들을 위해서 비밀번호 찾기 기능이 필요로하지않을까 생각이들었다.
다음과같이 비밀번호를 찾기위해서 회원가입 혹은 비밀번호 찾기를 이용할시 회원에 대한 전화번호를 수집하여 회원들을 특정 지을수 있도록 할것이다.
이에따라 회원 Entity의 Attribute로 전화번호가 추가 될 수 있다.
식별자 만들기 Primary Key(PK)
표를 만드는과정에서 의도하지않은 데이터 id를 찾아볼수있었는데
이는 각각의 Entity를 대표하는 특별한 식별자이다. 정확하게 구분되기위해서 각자 다른 번호를 가져야한다(중복 허용x)
떄문에 행이 추가될때마다 1 2 3 4 1씩 늘어나는것을 확인할수있다.
이러한 id는 우리가식별하기위해 인조로만들어낸 속성 인조키라고한다.
id 뿐만아니라 전화번호도 식별자로 사용될수있을것이다.(전화번호는 하나니깐) 때문에 식별자로 사용될수있는 속성들을
테이블(표)의 후보키라고 부른다.
후보키중에서도 정확하게 식별가능하게 만든 인조키가 기본키(PK)가된다. 그리고 전화번호와 같은 속성은 대체키(Ak)가 된다.
외래키
할일 엔티티 에서 Member_id 속성은 회원 엔티티의 PK인 id를 참조하고있는것이다. 이런것을 외래키라고한다.
Cardinality 엔티티간의 수적관계
예시 :
담임선생님은 하나의 반만 담당한다 : 각 반의 담임은 한명이다. 1 : 1
저자는 댓글을 여러개 작성가능하다 : 각 댓글은 하나의 저자만 존재한다. 1:N (1대다)
Entity간의 관계를 표현할때 Cardinality는 굉장히 중요하다
할일과 회원의 관계에 Cardinality를 적용해보자
- 각 회원은 여러 할일을 작성 할 수 있다.
- 각 할일은 하나의 회원이 작성 할 수 있다.(홍길동->밥먹기 , 임꺽정->밥먹기)
이러한 관계를 N-M or 다대다이라고함
Optionality 선택적 관계
엔티티간에 관계가 선택적일수도, 필수적일수도있다.
회원이 할일을 작성하지 않을수도있다 : 할일은 반드시 회원으로부터 작성되어야한다Optionality(선택) : Mandatory(필수)
ERD 만들어보기
draw.io와같이 erd 툴을 제공하는사이트를 이용해도되지만
가장 간단하고 최고의 툴인 종이와 펜으로 ERD를 만들었다.