본문 바로가기
DATABASE/MySQL

[MySQL] 관계형 데이터 모델링 1 (개념적 모델링) - join과 entity relationship diagram

by sjs_2215 2019. 8. 25.

수련: https://github.com/egoingsb/offline/wiki/database---mysql

다이어그램 그리기 좋은 사이트: https://www.draw.io/

 

1. 관계형 데이터 모델링 1

 

관계형 데이터 모델링의 근간이 JOIN

JOIN 연습장 https://docs.google.com/spreadsheets/d/1fyO9RdtExVdEgVGFtmsldA-c-rSC_5tauPF5Fnx0GeM/edit?usp=sharing

visual join https://joins.spathon.com/?fbclid=IwAR1gXYEFeYlTNA6cddhJ8K9Du91VLgtpXMCpI03Lo0dLfEuuyZtkenS7O90

 

1-1. 중복 없애기 - 쪼개 보자

EX.) 중복이 되는 (EGOING- DEVELOPER)를 해결해보자 -> 쪼개 보자

id title description created author_name author_profile
1 MySQL MySQL is ... 2019-1-1 egoing developer
2 Oracle Oracle is .... 2019-2-1 egoing developer
3 SQL Server SQL Server is ... 2019-3-1 duru DBA
4 MongoDB MongoDB is .. 2019-3-1 duru DBA

 


 

SOL) author를 별도로 쪼개서 author 테이블을 만들자. 중복되는 행은 삭제

author      
id author_name author_profile  
1 egoing developer  
2 duru DBA  
topic      
id title description created
1 MySQL MySQL is ... 2019-1-1
2 Oracle Oracle is .... 2019-2-1
3 SQL Server SQL Server is ... 2019-3-1
4 MongoDB MongoDB is .. 2019-3-1

 


 

근데 이렇게 하면 topic 테이블에 author 정보가 누락됨. author_id를 추가

topic        
id title description created author_id
1 MySQL MySQL is ... 2019-1-1 1
2 Oracle Oracle is .... 2019-2-1 1
3 SQL Server SQL Server is ... 2019-3-1 2
4 MongoDB MongoDB is .. 2019-3-1 2

-> 중복 없애기 전에는 보기 좋음, 근데 중복 없애고 나기에는 가독성은 떨어지나, 쓰기엔 좋음

 


 

1-2. 쓰기도 좋고 읽기도 좋은 illusion을 만들자 => JOIN

 

SELECT * FROM topic LEFT JOIN author topic.author_id=author.id

= topic 테이블을 기준으로 select 하는데 author테이블을 조인한다.

그 결과는

 

id title description created author_id id author_name author_profile
1 MySQL MySQL is ... 2019-1-1 1 1 egoing developer
2 Oracle Oracle is .... 2019-2-1 1 1 egoing developer
3 SQL Server SQL Server is ... 2019-3-1 2 2 duru DBA
4 MongoDB MongoDB is .. 2019-3-1 2 2 duru DBA

실제 물리적으로는 쪼개서 저장했으나, 논리적으로는 우리가 필요할 때마다 join문을 써서 분해되어 있는 것을 그때그때 출력하는 것

 


 

sql join

 

left join:

topic에 있는 모든 걸 가져오면서 오른쪽에 author 테이블을 붙임

 

여러 join이 있지만, 그때그때 공부하자. 다 일일이 기억하고 있을 필요 x

 


 

2. 개념적 데이터 모델링 & ER Diagram

 

 

mysql 알아두면 다른 데에서도 다 쓸 수 있음

 

관계형 데이터베이스 모델링

  • 표를 어떻게 만들까
  • 사람들과 어떻게 소통할까

 

2-1. 모델링 process

 

업무파악부터, create문까지 오기까지 공정한 방법으로 실행하는 것이 관계형 데이터베이스의 장점

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

 

1. 업무 파악

ui에서 서로의 업무/소통을 하자.

https://ovenapp.io

database 업무 파악하러 가기!! -> https://ovenapp.io/project/cAkjze3tDnepHvo2ZvSwqkz8mMvMLrsL#JVWbr

 

2. 개념적 데이터 모델링

(업무 파악 단계에서 만든) 기획서에서 데이터를 뽑아내서 flow chart를 만들어 내는 것

업무 파악 후 추상화하는 단계

 

3. 논리적 데이터 모델링

중복을 제외하여 다이어그램을 만드는 것. 아주 이상적인 것을 만드는 것

 

4. 물리적 데이터 모델링

이상적인 표를 현실에 맞게 다시 만드는 것

 


 

2-2. entity relationship diagram

기호는 전 세계적으로 통일되어 있다는 점!

 

 

정보 : 타원

정보 그룹 : 사각형

(정보 그룹 관계) 각각의 정보들의 관계성을 보여주는 것 : 마름모

 

 

1. entity는 테이블이 됨

이렇게 댓글/저자/글 나누었음. 이때 나눈 이 3개를 Entity라고 부름

 

 

2. attribute는 column이 됨

글이라는 entity 안에는 제목, 생성일, 본문이 있음.

이때 제목, 생성일, 본문은 attribute라고 함. 그리고 이는 column으로 이어짐

 

 

3. relation은 pk, fk가 됨 && tuple은 row가 됨

각각의 entity는 관계가 있음

저자와 글은 쓰다 의 관계. 이를 Relation이라고 한다.

primary key - 기본키

foreign key - 다른 표를 가리키는 키 (ex. topic 테이블의 author_id)

join을 통해 결합.

 

 

이 단계까지는 기획자와 같이 가는 게 좋다 engineer가 아니더라도

 


 

entity를 뽑기 힘듦. 정보 시스템이 복잡할수록

tip:

쓰기 페이지를 보자.

 

ex) 저자를 쓰는 거, 글을 쓰는 거, 댓글을 쓰는 거

 

(글=토픽)

글은 저자에 의존한다.

댓글은 글과 저자 모두에게 의존한다.

attribute 쓸 때 유일무이 중복 안될 것 같은 것부터 작성하는 게 좋음

 


 

식별자

-> 밑줄을 치는 규칙

primary key의 후보들을 candidate key라고 함. (선택된 pk 포함)

후보 키 중 pk를 제외한 게 대체키

 

중복 키 = 복합 키

두 개가 결합돼야 중복되지 않는 경우. 두 가지를 결합해서 primary key로 지정할 수 있음 (ex. 직원 번호 + 부서 번호)

 


 

2-3. relationship

 

중요한 것 3가지

  • 쓰다인지, 소속인지
  • cardinality : 몇 대 몇인지
  • optionality: 필수이냐 옵션이냐

 


 

cardinality

 

담임(key, lee, park)

반(1반, 2반, 3반)

담임에게 반은 1 = 각 선생님은 한 반만 담당하다

반에게 담임은 1 = 각 반의 담임은 한 명이다.

=> 일대일 관계

기호 -

 

 

저자(key, lee, park)

댓글(1, 2, 3)

저자는 댓글에게 n = 한 사람의 저자는 댓글을 여러 개 달 수 있음

댓글에게 저자는 1 = 댓글은 하나의 저자만 존재한다.

=> [저자:댓글 = 1 : N] 관계

기호 - 까마귀 발

 

 

저자(key, lee, park)

글(1, 2, 3)

저자에게 글은 m = 각 저자는 여러 글 쓸 수 있음

글에게 저자는 n = 각 글은 여러 명의 저자가 존재할 수 있음

=> [저자 : 글 = n : m] 관계

기호 까마귀 발 - 까마귀 발

 

 

다이어그램 그리면서 헷갈리지 않게 나만의 이해 방법 세우기

 


 

optionality

 

저자(key, lee, park)

댓글(1, 2, 3)

저자에게 댓글은 옵션이다 = 저자는 댓글을 꼭 안 써도 됨.

댓글에게 저자는 필수다 = 댓글이 존재하면 저자가 있어야 함

=> [저자 : 댓글 = mandatory : optional] 관계

기호: 세로 선 - 동그라미

 

 

 

 


http://erd.yah.ac/

 

Entity relational diagram Helper

ERD의 cardinality, optionality 관계를 파악할 때 헷갈림을 줄여주기 위해서 만든 교육용 앱입니다. 아래 수업을 통해서 데이터베이스 모델링과 ERD를 만드는 법을 공부할 수 있습니다.

 

https://opentutorials.org/module/4134

 


 

완성된 다이어그램

 

Comments