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

 

개념적 데이터 모델링

 

ERD (Entity Relationship Diagram) - 1. 정보, 2. 그룹, 3. 관계 

 

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

 

거대 단일 테이블로 표현을 하면 중복이 발생합니다

 

표를 쪼개면 좋은 점은 속성들을 주제에 따라서 데이터를 그룹핑할 수 있습니다

 

만약 글에 대한 정보만 필요하다 그러면 글을 담고 있는 표만 필요하기 때문에 컴퓨터의 자원도 아낄 수 있습니다

 

중요한 특징 중 하나는 JOIN 

 

댓글 글 저자 - Entity

 

Entity는 후에 table로 전환되게 될 것임

 

글 - 제목, 생성일, 본문 으로 그룹핑 되어있음

 

이 구체적인 데이터를 Attribute(속성)

 

글과 저자는 쓴다 라는 관계를 가지고 있고 글과 댓글은 서로 소속 관계를 가지고 있다 저자와 댓글은 쓴다 라는 관계를 가지고 있다

 

이렇게 연관성을 표현해준것이 Relation

 

□Entity -> Table

○Attribute -> Column

◇Relation -> PK, FK

행 Tuple -> Row

 

기획서를 보면 가장 먼저 해야할 일은 Entity를 찾아내는 것

 

읽기보단 쓰기를 보면

 

저자, 글, 댓글 이 Entity로 적합

'DATABASE > Database' 카테고리의 다른 글

공부(6)  (0) 2021.08.31
공부(5)  (0) 2021.08.30
공부(3)  (0) 2021.08.30
공부(2)  (0) 2021.08.29
공부(1)  (0) 2021.08.29

INNER JOIN

 

SELECT * FROM TableA A INNER JOIN TableB B ON A.key = B.key

 

이므로

 

SELECT * FROM topic INNER JOIN author ON topic.author_id = author.aid

 

SELECT * FROM topic INNER JOIN author ON topic.author_id = author.aid INNER JOIN profile ON author.profile_id = profile.pid

 

이런식으로 작성해 줄 수 있다

 

왼쪽의 것만 할 때는 LEFT JOIN이고 SELECT * FROM TableA A LEFT JOIN TableB B ON A.key = B.key

 

FULL OUTER JOIN

 

SELECT * FROM topic FULL OUTER JOIN author ON topic.author_id = author.id

 

안타깝게도 많은 DB에서 FULL OUTER JOIN을 지원하지 않는다

 

그러므로 UNION을 써준다

 

중복되는 것을 지워주는 역할을 하는게 UNION DISTINCT

 

(SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid) UNION (SELECT * FROM topic RIGHT JOIN author ON topic.author_id =author.aid)

 

EXCLUSIVE JOIN

 

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid WHERE author.aid is NULL

 

 

'DATABASE > Database' 카테고리의 다른 글

공부(6)  (0) 2021.08.31
공부(5)  (0) 2021.08.30
공부(4)  (0) 2021.08.30
공부(2)  (0) 2021.08.29
공부(1)  (0) 2021.08.29

테이블 쪼개기

 

표를 쪼개고 중복성을 제거한다

 

트레이드오프란 상황 속에서 장점만 즉 읽기도 쉽고 쓰기도 쉬운 그런 프로그램을 만드는 것이 목표

 

LEFT JOIN

 

데이터베이스에서 Left (outer) Join이 많이 사용된다

 

SELECT * FROM topic

 

SELECT * FROM topic LEFT JOIN author //topic테이블은 왼쪽에 두고 오른쪽에 author테이블 두겠다

 

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid

//topic 테이블의 author_id와 author테이블의 aid식별자가 값이 같은데 그걸 참고하여 두개테이블을 하나로 만들어줘

 

이것이 LEFT JOIN이다

 

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid LEFT JOIN profile ON author.profile_id = profile.pid;

 

이렇게 여러개를 붙일수도 있다

 

SELECT tid, topic.title, author_id, name, profile.title AS job_title FROM topic LEFT JOIN author ON topic.author_id = author.aid LEFT JOIN profile ON author.profile_id = profile.pid;

 

이것은 위 빨간글씨부분만 가져오세요 라는 뜻이다

 

profile.title은 중복되는 title이 있으므로 profile의 title을 가져오라는 뜻이고

 

AS는 profile의 title을 job_title로 별명을 준것으로 보면 된다

 

SELECT tid, topic.title, author_id, name, profile.title AS job_title FROM topic LEFT JOIN author ON topic.author_id = author.aid LEFT JOIN profile ON author.profile_id = profile.pid WHERE aid = 1;

 

aid 값이 1인 값들만 불러오게 된다

 

'DATABASE > Database' 카테고리의 다른 글

공부(6)  (0) 2021.08.31
공부(5)  (0) 2021.08.30
공부(4)  (0) 2021.08.30
공부(3)  (0) 2021.08.30
공부(1)  (0) 2021.08.29

데이터베이스의 본질

 

데이터베이스의 데이터를 어떻게 입력하고 어떻게 출력하는지를 파악해야 한다

 

입력은 세가지의 작업으로 쪼갤 수 있다 Create Update Delete

 

출력은 Read

 

이 4가지 작업을 CRUD라고 부른다

 

file vs database

 

파일에 비해 스프레드시트는 구조적으로 데이터를 저장한다

정리정돈을 하니까 데이터를 가공하는 것이 훨씬 쉬워진다
전문적인 데이터베이스는 사람이 일일이 작성하지 않고도 어떤 조건에 따라 자동적으로 CRUD를 할 수 있는 기능이 있다

'DATABASE > Database' 카테고리의 다른 글

공부(6)  (0) 2021.08.31
공부(5)  (0) 2021.08.30
공부(4)  (0) 2021.08.30
공부(3)  (0) 2021.08.30
공부(2)  (0) 2021.08.29

+ Recent posts