본문 바로가기
생활코딩/DATABASE

6) DATABASE : 관계형 데이터 모델링

by Love of fate 2020. 7. 28.
728x90
반응형

MODEL : 어떤 목적을 가지고 진짜를 모방한 것 (좋은 모델이란 목적에 부합하는 모방)

목적 : 관계형 데이터베이스, 표에 데이터를 담는 것

DATA MODELING : 복잡한 현실을 컴퓨터로 이사시키는 작업

(데이터베이스의 기본 사용법 (테이블의 생성, 조회, 수정, 삭제, JOIN)은 알고 있지만, 복잡한 현실을 데이터베이스로 표현하는데 어려움이 있는 분에게 유용한 수업입니다.

프로젝트의 참여자들과 소통을 하는데 어려움이 있는 사람에게 도움이 된다.)


전체 흐름 : 데이터모델링 순서

업무파악 --> 개념적 데이터 모델링 --> 논리적 데이터 모델링 --> 물리적 데이터 모델링

1) 업무파악 - 가장 중요!!!!

우리가 해야할 일이 무엇인지 의뢰한 사람과 잘 협력해서 알아내야 하는 것 

어떤것을 꿈꾸고 있는지 알아내야함.

2) 개념적 데이터 모델링

내가 하고자 하는 이 일에 어떠한 개념들이 있고 각가의 개념들은 어떻게 상호작용하고 있는가 

라는 것을 심사숙고하는 시간

이 과정에서 ER-다이어그램이라고 하는 얻게 됨. 

3) 논리적 데이터 모델링 

- 해당 개념을 관계형 데이터베이스에 맞게 잘 구성을 하는 작업 

- 관계형 데이터베이스 패러다임에 맞는 표로써 우리가 만들었던 생각했던 개념을 표로 전환하는 작업을 함. 

4) 물리적 데이터 모델링

- 어떤 데이터 베이스 제품을 사용할 것인가를 선택하고 그 데이터베이스 제품에 최적화된 코드를 작성해서 실제 표를 만드는 것이 물리적 데이터 모델링에서 하는 일이고 그 때 산출문을 표를 생성할 수 있는 Sql 코드를 갖게 되는 것이 물리적 데이터 모델링 단계에서의 목적이라고 할 수 있다. 

- 데이터 모델링이란 문제를 현실로 부터 뜯어내서 고도의 추상화 과정을 거쳐 컴퓨터라는 새로운 현실로 옮겨담는 작업이다. 두개의 세개는 서로 다르기 때문에 처음에 해결하려고 했던 문제가 데이터베이스의 표에 잘 담겨있는지 확인하는 작업을 끊임없이 계속해서 해나가야함.


업무파악 : 업무를 파악하는 방법

업무파악이 우선

컴퓨터 공학이 해결하는 문제는 컴퓨터 자체의 문제를 해결하는 것, 현실의 문제를 해결하는 것 두가지가 있다. 

전자 : 데이터베이스를 만드는 사람. 

후자 : 데이터베이스를 통해서 현실의 문제를 해결하는 사람

 

후자의 경우 컴퓨터를 잘 이해하는 것만으로는 부족하다. 해결하려고 하는 문제를 컴퓨터에게 설명할 수 있을 정도로 업무를 파악해야한다. 

그러기 위해서는 해당 분야의 실무자들과 커뮤니케이션이 잘 되어야 한다. 

이해를 했다면 설명할 수도 있어야 한다.

익숙한 것만으로는 컴퓨터를 다룰 수 없다. 컴퓨터가 해야할일을 정확하게 이해해줘야 동작하기 때문

업무파악을 할 때 많이 사용하는 방법은 같이 화면 UI를 제작해 보는 것이다. 

말의 힘을 불신하라 (말의 진의를 불신하는 말이 아니다.) : 말의 기능을 불신

말을 불신할 수록 말의 신뢰는 높아진다. 

 OVEN WEB : 프로젝트 대쉬보드 : 메뉴얼 사이트를 만드는 사이트 (카카오)


개념적 데이터 모델링 : 우리가 파악한 업무에서 개념을 뽑아내는 과정이다

개념적 모델링은 관계형 데이터베이스의 극치이다.

논리적 모델링, 물리적 모델링은 비교적 기계적인 일이다. 

모델링이라는 것은 업무라는 현실과 데이터베이스라는 현실이 있을 때 그것을 이사시키는 작업이다. 

(물리적 모델링까지 완료한 후 모델링에 도전하게 되었을 때 다시 이 강의를 듣는다면 이해하게 될 것이다.

느긋하게 생각하자)

개념적 데이터 모델링이 주는 효용성

1. 필터 : 현실에서 개념을 추출하는 일종의 필터 역할

2. 언어 : 개념에 대해서 다른 사람들과 대화하게 해주는 언어로써 역할을 함

 

ERD (Entity Realationship Diagram) : 이러한 목적을 이루게 해주는 하나의 도구 

ERD는 현실을 세개의 관점으로 바라볼 수 있게해주는 파인더(간단하게 바라보게 해줌)를 제공해준다.

1 정보 : 정보를 발견하고 그것을 다른사람에게 표현할 수 있게 해준다.

2. 그룹 : 서로 연관되는 정보를 그룹핑해서 인식하고 이것을 다른사람들에게 표현할 수 있게 해준다.

3. 관계 : 정보 그룹 사이의 관계를 인식하고 그것을 다른 사람에게 표현할 수 있게 해준다.

4. 매우 쉽게 표로 전환할 수 있다. 

- 현실로부터 개념을 인식하는 도구 이면서 그것을 다른사람도 알아볼 수 있게 표현하는 도구가 바로 ERD이다.


ERD를 만드는 방법

그림으로 표현했을 때 정답은 없고 설명이 가능하고 모순이 없다면 타당하다.

관계형 데이터베이스에서는 내포관계를 허용하지 않는다.

거대 단일 테이블로 표현하면 중복이 발생한다.

--> 이러한 문제를 해결하기 위해서는 주제에 따라서 테이블을 쪼갠다.

글, 저자, 댓글 

표를 쪼개었을 때 좋은점

- 주제에 따라서 데이터를 그룹핑 할 수 있다.  - 가장 중요한 의미

- 컴퓨터의 자원을 아낄 수 있다.

- JOIN!! (언제든지 순간 순간 합성해낼 수 있다.)


이렇게 찾아낸 정보를 ERD에서는 Entity라고 한다. 추후에 Table이 된다. 

Entity는 실제 데이터가 아닌다. 구체적인 데이터는 제목, 생성일, 본문이다. 

이것을 그룹핑 한 것이 '글'이라는 Entitiy이다. 

구체적인 데이터를 Attribute 라고 하고 후에 표의 Column이 된다. 

관계 : Entitiy간의 관계

Relation : PK, FK, JOIN 

---- 정리 ----

□ Entity ==> Table

○ Attribute ==> Column

◇ Relation ==> PK,FK

Tuple ==> ROW


엔티티 정의

기획자와 구현자가 다르다면 데이터 모델링까지는 같이 가는 것이 이상적이라고 생각한다.

데이터 모데링 순서 

1. 기획서에서 Entity를 찾아야 한다. (쓰기화면에서는 찾기 쉽다)

2. 식별자 지정 (Identifier) 

 - 원하는 대상을 정확하게 타겟팅하는 것 

 - 그 대상을 제외한 누구도 같은 값을 가지고 있으면 안된다. --> 기본키가 될 것 


Relationship --> 릴레이션 쉽은 무엇이 되는가 

Cardinality : 

Optionality : 


논리적 데이터 모델링 

- ER diagram을 관계형 데이터베이스 모델에 어울리게 변환하는 과정 

- 개념적 데이터 모데링에서 뽑아낸 개념을 관계형 데이터베이스 패러다임에

   어울리게 데이터 형식을 잘 정리정돈 하는것 

- Mapping rule

:  ER 다이어그램을 통해 표현한 내용을 관계형 데이터 베이스에 맞는 형식으로 전환할 때 사용하는 방법론

□ Entity => Table

○ Attribute => Column

◇ Relation => PK, FK


ER다이어그램에서 그린 그림을 관계형데이터모델로 전환하는 작업 진행

ER Master (오픈소스 도구) 참고


Normalization : 정규화

- 정제되지 않은 데이터를 표를 관계형 데이터 베이스에 어울리는 표로 만들어주는 레시피

- 제 3 정규형까지 실무에서 많이 쓰인다. 


물리적 데이터 모델링

논리적 데이터 모델링이 관계형 데이터베이스 패러다임에 잘 맞는 이상적인 표를 만드는 것이었다면, 물리적 데이터 모델링은 선택한 데이터베이스 제품에 맞는 현실적인 고려를 하는 방법론

이 단계에서 가장 중요한 것은 성능입니다.

특히 역정규화(반정규화, denormalization)의 사례를 집중적으로 다룹니다. 

이상적인 표를 현실적인 표로 만드는 작업(성능향상!!!!)

find slow query를 찾을 수 있는 방법이 제품마다 다르다.

제품과 함께 검색하면 어디서 병목현상이 발생하는지 알 수 있다.

 

느려지는 부분을 찾았다면 이상적으로 정규화된 구조에 손을 되는 것 이것을 역정규화, 반정규화라고 한다.

혹독한 대가를 치뤄야함 내가 처해있는 상황에 무엇인가에 의해서 결정이 된다. 

그래서 역정규화를 하기 전에 다른 방도를 찾아본다. 

1. index : 인덱스는 행에 대한 읽기 성능을 비약적으로 향상시킨다. 쓰기 성능을 비관적으로 약화시킨다. 

쓰기가 이루어질때마다 인덱스가 걸려있다면 입력된 정보를 잘 정리정돈하기 위한 복잡한 연산과정이 필요하다.

이 과정에서 시간이 많이 걸릴 뿐만 아니라 저장공간을 더 많이 차지하기도 한다.

그럼에도 불구하고 인덱스를 사용하는 이유는 정리정돈하면 엄청나게 빠른 속도로 읽을 수 있기 때문이다.

2. application 영역에서 cache와 같은 방법을 시도해보는 것도 좋다. 

- 저장하다. 입력에 따른 실행결과를 저장해뒀다가 동일한 입력이 들어왔을때 저장되었던 결과를 사용하므로써 데이터베이스에 부하를 주지 않는다. 

3. 역정규화 


역정규화 소개

 

728x90
반응형

'생활코딩 > DATABASE' 카테고리의 다른 글

5) DATABASE : SQL JOIN  (0) 2020.07.28