해당 글은 코드잇에서 실습한 내용을 토대로 정리한 글입니다 :)
우리는 데이터를 가져오기 위해 데이터베이스를 사용합니다. 데이터를 저장, 삭제, 조회하기 전부터 먼저 해야할 것이 있습니다. 바로 데이터를 '어떻게' 저장할지 계획하는 것입니다.
예를 들어, 위의 사진을 보면 id, email, name, gender의 컬럼으로 각 정보를 담은 테이블이 있습니다. 그리고 테이블 위의 글자를 살펴보면 INTEGER, TEXT 등 각각의 데이터 타입과 PRIMARY KEY, UNIQUE 등 데이터의 속성들이 나타나 있습니다. 이러한 속성을 준 것은 누군가가 이 테이블을 생성할때 미리 설정해놓은 것이겠죠.
이렇게 데이터베이스를 새롭게 구축할때는 데이터를 어떤 테이블로 나타낼지, 각 테이블에는 어떤 컬럼을 설정해야 할지 결정해야 합니다. 이것을 바로 "데이터 모델링" 이라고 합니다.
데이터 모델링은 크게 두가지 단계로 나눕니다. 바로 논리적 모델링, 물리적 모델링인데요, 아래의 챕터처럼 저는 크게 3단계로 나누어 3개의 글을 포스팅할 계획입니다.
Chapter 1: 데이터 모델링
Chapter 2: 논리적 모델링
Chapter 3: 물리적 모델링
그중 Chapter 1인 데이터 모델링입니다.
데이터 모델
:데이터를 사용하려는 목적에 맞게 정리하고 체계화해놓은 모형
위의 그림처럼 데이터를 row와 column이 있는 테이블로 나누고, 각 테이블들의 관계를 foreign key로 설정합니다.
데이터 자체는 주어진 구조나 형태가 없지만, 테이블 형태로 정리해놓는게 훨씬 더 이해하고 사용하기 쉽습니다. 이렇게 사람이 이해하고 다룰 수 있게 하고, 데이터를 만들어내는 작업이기 때문에 이러한 과정을 데이터 모델링이라고 부릅니다.
그렇다면 데이터 모델링은 어떻게 해야 할까요?
그전에 미리 알아야할 개념이 있습니다. 데이터를 어떻게 인식해서 저장하고 싶은지 이해하는 작업이 우선입니다.
1. Entity(개체)
:저장하고 싶은 데이터의 대상
예를 들어 대학교 포털에서 학생,수업,교수에 대해 저장하고 싶습니다. 바로 학생, 수업, 교수를 Entity라고 합니다.
그리고 학생, 수업, 교수처럼 하나하나씩이 아니라 일반화한 Entity 종류를 Entity Type이라고 합니다.
따지고보면 둘이 다른 개념이지만, 대부분의 사람들은 Entity Type을 Entity라는 단어를 사용해서 표현합니다. 보통 이 두가지를 섞어서 사용한다고 합니다 :)
2. Attribute(속성)
:Entity에 대해 저장하려는 내용
학생이라는 엔티티에 대해서는 학번, 이름, 성별, 입학년도, 전공이라고 저장하고 싶고, 수업이라는 엔티티에 대해서는 시간, 이름, 과, 지도교수라고 정하고 싶습니다. 이것을 Entity의 Attribute라고 표현합니다. 쉽게 테이블의 컬럼이라고 생각하면 됩니다.
3. Relationship(관계)
:Entity들 사이 연결점
보통 저장하려는 엔티티들은 다른 엔티티들과 서로 연결되어 있습니다다. 예를 들어 학생은 수업을 듣고, 교수는 수업을 가르칩니다. 이렇게 연결되어있는 두 엔티티 사이에서 Relationship, 즉 관계가 있다고 말합니다.
4. Constraint(제약 조건)
:각 데이터에 대해 일종의 규칙을 부여하는 것
학생의 학번은 겹치면 안된다든지, 모든 수업은 적어도 한명의 교수를 갖는다든지 이렇게 각 데이터들의 일종의 규칙을 부여하는 것입니다.
데이터 모델링 목적
- 저장하고자 하는 데이터에서 Entity, Attribute, Relationship, Constraint를 파악하기
- 데이터베이스를 구축할 때 기반이 될 모델 만들기
Relational Model
-데이터를 로우와 컬럼으로 이루어진 테이블을 가지고 표현한 모델, 관계형 모델이라고 함.
여기서 Relation과 Relationship의 각 단어에 대해 다시 한번 생각해볼 필요가 있습니다.
- Relation은 테이블들 사이에 맺어지는 연결관계를 의미하는게 아니라 '테이블'을 의미하는 수학적 표현입니다. 하나의 테이블이 하나의 릴레이션이라고 표현할 수 있습니다.
- Relation Model은 데이터를 릴레이션, 즉 테이블로 정리해서 표현한 모델입니다. 또한, 외래키를 통해 관계를 설정하면서 표현합니다. 이렇게 테이블들 사이에 맺어지는 관계를 Relationship이라고 합니다.
사실 Relation Model은 우리에게 가장 익숙하고, 실제 데이터베이스를 만들때도 편리하지만, 몇몇 단점들 때문에 데이터 구조와 논리를 직관적으로 이해하기 힘들 수 있습니다.
그 첫번째 단점으로는, row가 있다는 점입니다.
row는 각각의 한 데이터를 의미하며, 실제로 데이터를 저장을 할 때 없어서는 안되지만, 구조를 얘기할 때는 크게 필요하지 않습니다. 아래의 그림처럼 로우가 없어도 데이터 구조가 어떻게 이루어져있는지 바로 파악할 수 있죠.
두번째 단점으로는, 테이블 사이에 맺어지는 관계의 특성을 한눈에 알기 힘듭니다.
Relation Model에서 테이블 사이의 관계는 외래키를 사용해서 표현하게 되는데, 위의 그림처럼 화살표를 통해 두 테이블이 관계가 있다는 정도만 알 수 있지 특성을 파악하기는 힘듭니다.
데이터 자체를 설명할 때 Relation Model을 많이 사용하지만, 모델링을 할때는 구조를 파악할 수 있는 방법을 다른 모델을 같이 사용합니다.
바로 Entity Relationship Model, 줄여서 ERM입니다. Relation Model처럼 테이블로 표현하는게 아니라 다르게 표현하는 모델인데요, 더 자세한 내용은 다음 포스팅으로 찾아뵙겠습니다!
'데이터분석 공부하기' 카테고리의 다른 글
MySQL 데이터 타입(Data type) (0) | 2021.11.21 |
---|---|
모델링 기본 정리 (0) | 2021.11.07 |
ANY, SOME, ALL (0) | 2021.10.10 |
여러가지 JOIN들 (0) | 2021.09.12 |
Primary Key의 종류 (0) | 2021.08.15 |
댓글