수련: 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에서 서로의 업무/소통을 하자.
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] 관계
기호: 세로 선 - 동그라미
Entity relational diagram Helper
ERD의 cardinality, optionality 관계를 파악할 때 헷갈림을 줄여주기 위해서 만든 교육용 앱입니다. 아래 수업을 통해서 데이터베이스 모델링과 ERD를 만드는 법을 공부할 수 있습니다.
https://opentutorials.org/module/4134
완성된 다이어그램
'DATABASE > MySQL' 카테고리의 다른 글
[MySQL] 관계형 데이터 모델링 2 (논리적 모델링) - 정규화 (0) | 2019.08.29 |
---|---|
[MySQL] 관계형 데이터 모델링 3 (물리적 모델링) - 역정규화, 분석, 성능 개선 하는 법 (0) | 2019.08.28 |
[MySQL] 관계형 데이터 모델링 2 (논리적 모델링) - 1:1, 1:N, N:M 관계 맵핑하기 (0) | 2019.08.26 |
[MySQL] 관계형 데이터베이스의 응용 - client와 server, php 실습코드 (0) | 2019.08.25 |
[MySQL] 관계형 데이터베이스 소개와 기본 사용법: MySQL의 생성, 읽기, 수정, 삭제 (0) | 2019.08.21 |
Comments