tumblr.com 에 대한 db구조 분석

75
Micro Blog Database 중앙대학교 컴퓨터공학부 데이터베이스 설계 5조 Tumblr(텀블러) 사이트에 대한 데이터베이스 분석 - 최종제출 장익환(20060957) 유혜성(20091509) 강수현(20110483) 황정윤(20114509)

Upload: ikwhan-chang

Post on 03-Jul-2015

861 views

Category:

Documents


9 download

DESCRIPTION

중앙대학교 컴퓨터공학부 데이터베이스 설계 2반 5조 최종자료 tumblr.com 마이크로 블로그에 대한 DB구조 분석 및 ER 설계 몇 가지 유효한 질의문 추출 made by Matthew. J

TRANSCRIPT

Page 1: tumblr.com 에 대한 DB구조 분석

Micro Blog Database중앙대학교 컴퓨터공학부 데이터베이스 설계 5조Tumblr(텀블러) 사이트에 대한 데이터베이스 분석 - 최종제출장익환(20060957) 유혜성(20091509) 강수현(20110483) 황정윤(20114509)

Page 2: tumblr.com 에 대한 DB구조 분석

2INDEX

• 응용 분야

• 참조 사이트

• 응용의 기능

• 요건분석

• ERD & ER-테이블

• 질의 리스트

• 응용 쿼리

Page 3: tumblr.com 에 대한 DB구조 분석

!3

응용 분야

Page 4: tumblr.com 에 대한 DB구조 분석

3응용 분야• 우리팀은 웹 서비스 중 “블로그”를 응용 분야의 한 주제로 선정하였다.

• 네이버 블로그, 티스토리, 이글루스 등 수 많은 블로그 플랫폼 중에 이러한 방대한 기능을 배

제하고, 기본적인 블로그의 기능인 “포스팅” 기능을 세분화하여 여기에 추가적으로 소셜 네트

워크 기능(SNS)을 제공하는 응용 분야를 생각하였다.

• 본 응용분야는 기본적인 사용자 처리(회원가입,로그인 등)의 기능과 블로깅(글, 그림, 오디오,

비디오) 기능, 그리고 추가적으로 SNS기능의 일부인 친구관리 및 타임라인, 채팅등의 기능을

처리한다.

• 추가적으로 사용자들이 자신의 블로그를 꾸밀 수 있는 기능과 스킨을 사고팔 수 있는 마켓플

레이스를 처리한다.

Page 5: tumblr.com 에 대한 DB구조 분석

!5

참조 사이트

Page 6: tumblr.com 에 대한 DB구조 분석

참조 사이트

텀블러(tumblr)는 사용자들이 문자, 그림,

영상, 링크, 인용, 소리를 그들의 조그마한

텀블로그에 게재할 수 있게 도와 주는 마이

크로블로그 플랫폼이자 웹사이트이다.

! 사용자들은 다른 사용자를 팔로우(follow)

할 수 있고, 또한 블로그를 꾸밀 수 있다.

사용자는 또한 자신이 직접 스킨을 제작하

고 판매할 수 있는 마켓 플레이스를 갖추고

있다.

www.tumblr.com

!6

Page 7: tumblr.com 에 대한 DB구조 분석

!7

응용의 기능

Page 8: tumblr.com 에 대한 DB구조 분석

응용의 기능•텀블러 응용 기능

텀블러 DB

포스팅

팔로잉

친구 관리

타임 라인글 쓰기, 수정, 삭제

글/사진/비디오/오디오 …

스킨

스킨 구매

스킨 제작

블로그 회원관리

계정

!8

Page 9: tumblr.com 에 대한 DB구조 분석

!9

요건분석

Page 10: tumblr.com 에 대한 DB구조 분석

요건분석•Dashboard(http://www.tumblr.com/dashboard)

글작성

타임라인

블로그 정보

포스트/팔로워 정보

설정

추천 블로그

내 활동 정보

!10

Page 11: tumblr.com 에 대한 DB구조 분석

요건분석•블로그 만들기

!11

Page 12: tumblr.com 에 대한 DB구조 분석

요건분석•포스팅 작성 - 분류(http://www.tumblr.com/dashboard)

!12

Page 13: tumblr.com 에 대한 DB구조 분석

요건분석•포스팅 작성 - 글(http://www.tumblr.com/dashboard)

!13

Page 14: tumblr.com 에 대한 DB구조 분석

요건분석•포스팅 작성 - 사진(http://www.tumblr.com/dashboard)

!14

Page 15: tumblr.com 에 대한 DB구조 분석

요건분석•포스팅 작성 - 인용구(http://www.tumblr.com/dashboard)

!15

Page 16: tumblr.com 에 대한 DB구조 분석

요건분석•포스팅 작성 - 링크(http://www.tumblr.com/dashboard)

!16

Page 17: tumblr.com 에 대한 DB구조 분석

요건분석•포스팅 작성 - 채팅(http://www.tumblr.com/dashboard)

!17

Page 18: tumblr.com 에 대한 DB구조 분석

요건분석•포스팅 작성 - 오디오(http://www.tumblr.com/dashboard)

!18

Page 19: tumblr.com 에 대한 DB구조 분석

요건분석•포스팅 작성 - 동영상(http://www.tumblr.com/dashboard)

!19

Page 20: tumblr.com 에 대한 DB구조 분석

요건분석•포스팅 뷰

!20

Page 21: tumblr.com 에 대한 DB구조 분석

요건분석•사용자 가입

!21

Page 22: tumblr.com 에 대한 DB구조 분석

요건분석•블로그 꾸미기

!22

Page 23: tumblr.com 에 대한 DB구조 분석

요건분석•테마 - 목록

테마 섬네일

카테고리

구매정보

!23

Page 24: tumblr.com 에 대한 DB구조 분석

요건분석•테마 - 등록

제목소스코드

요약

설명

섬네일

스크린샷

!24

Page 25: tumblr.com 에 대한 DB구조 분석

!25요건분석

• 사용자는 아이디,이메일주소,비밀번호,포스트 편집도구,언어 를 선택하여 회원가입 할 수 있다.

• 사용자는 계정을 일시정지하거나 탈퇴할 할 수 있다.

• 사용자는 글(포스팅) 작성이 가능하다.

• 사용자는 다른 사용자를 팔로잉(친구추가)할 수 있다.

• 사용자는 테마를 만들 수 있다.

•사용자

Page 26: tumblr.com 에 대한 DB구조 분석

!26요건분석

• 사용자는 제목과 URL을 입력해서 블로그를 생성할 수 있다.

• 사용자는 다른 사용자가 만든 테마를 자신의 테마에 적용하거나 구매할 수 있다.

• 구매한 테마의 목록은 ID별로 기록된다.

• 사용자는 다양한 옵션으로 블로그를 customizing할 수 있다.

• 하나의 블로그는 트위터,페이스북,포스퀘어,플리커,스카이프 등 여러개의 SNS서비스의 정보를 가진다.

•블로그

Page 27: tumblr.com 에 대한 DB구조 분석

!27요건분석

• 사용자는 텍스트,사진,인용구,링크,채팅,오디오,동영상 의 유형 중 하나를 선택해서 글(포스팅)을 등록할 수 있다.

• 하나의 포스팅의 유형은 각각 다른 속성을 가지고 있다.

• 하나의 포스팅은 등록일자,수정일자,작성자IP,출처URL을 공통으로 기록한다.

• 하나의 포스팅은 여러개의 태그를 가질 수 있다.

• 이미지 유형의 경우 여러개의 이미지를 등록할 수 있다.

•포스팅(글)

Page 28: tumblr.com 에 대한 DB구조 분석

!28요건분석

• 사용자는 여러명의 사용자를 자신의 팔로워(친구)로 만들 수 있다.

•팔로워(친구목록)

• 하나의 사용자는 여러개의 테마를 만들 수 있다.

• 하나의 테마는 제목,요약,정보,소스코드,섬네일,가격,유/무료 여부의 속성을 가진다.

• 하나의 테마는 여러개의 스크린샷을 가질 수 있다.

• 하나의 테마는 하나의 카테고리를 가진다.

• 사용자는 다른 사용자가 등록한 테마를 카테고리별, 검색어별로 검색할 수 있다.

•테마

Page 29: tumblr.com 에 대한 DB구조 분석

!29

ERD & ER 테이블

Page 30: tumblr.com 에 대한 DB구조 분석

ERD 테이블 !30블로그

사용자

포스트

테마

Page 31: tumblr.com 에 대한 DB구조 분석

ERD 테이블 !31•사용자

Table Attributes

TBL_USER사용자SEQ(PK,AI), 사용자ID, 비밀번호, 이메일, 가입일자,사 용자프로필사진URL,상태(0:탈퇴 1:가입 2:일시정지), 탈퇴일자, 정보수정일자, 사용언어, 사용 포스팅 툴

TBL_FRIENDS 친구목록SEQ(PK,AI), 친구 SEQ(FK), 사용자 SEQ(FK)

TBL_BUY_LIST구매목록SEQ(PK,AI), 구매한사용자SEQ(FK), 구매한 테마 SEQ(FK), 구매일자, 구매방법

TBL_LIKE_LIST좋아요목록 SEQ(PK,AI), 좋아요 일자, 좋아요한 포스트 SEQ(FK), 좋아요한 사용자 SEQ(FK)

Page 32: tumblr.com 에 대한 DB구조 분석

ERD 테이블 !32•블로그

Table AttributesTBL_BLOG 블로그SEQ(PK,AI), 블로그 제목, 만든이 ID(FK), URL, 블로그 설명, 작성일자, 방문자

TBL_BLOG_OPTION 블로그 옵션 SEQ(PK,AI), 미리보기옵션, 페이지당 포스트갯수, 텀블러 공유 옵션, 모바일 레이아웃 옵션, 새창으로 옵션

TBL_BLOG_VIEW_OPTION 블로그 보기 옵션 SEQ(PK,AI), 작은 레이아웃 옵션, 빨간배경 옵션, 파란배경 옵션, 칼라 상단바 옵션, 날짜숨기기 옵션, 배경숨기기 옵션, 탭 숨기기 옵션, 노트 숨기기 옵션, 동적크기 옵션, 무한스크롤 옵션, 소셜링크버튼 없애기 옵션

TBL_BLOG_SOCIAL 블로그 소셜 SEQ(PK,AI), Github URL, 비핸스 URL, 포스퀘어 URL, 라스트FM URL, 구글분석도구 URL, 트위터 URL, 페이스북 URL, 드리블 URL, 플리커 URL, 스카이프 URL, 데비안아트 URL, 비메오 URL, 디스쿼스 URL

Page 33: tumblr.com 에 대한 DB구조 분석

ERD 테이블 !33•포스트

Table AttributesTBL_POSTS

포스팅SEQ(PK,AI), 블로그 SEQ(FK), 포스트 타입(0 : 글 1 : 사진 2 : 인용구 3 : 링크 4 : 채팅 5 : 오디오 6 : 동영상), 작성일, 수정일, 작성자IP, 사용자임의URL, 옵션1, 출처URL, 조회수, 라이크한 수

TBL_TAGS 태그SEQ(PK,AI), 포스트SEQ(fk), 태그이름

TBL_POST_WRITINGS

포스팅 SEQ(PK,FK), 제목, 내용

TBL_POST_IMAGE 포스팅 SEQ(PK,FK), 내용

TBL_POST_IMAGE_LIST 포스팅 SEQ(PK,FK), 내용, URL

TBL_POST_AUDIO 포스팅 SEQ(PK,FK), URL

TBL_POST_VIDEO 포스팅 SEQ(PK,FK), URL, 내용

TBL_POST_CHAT 포스팅 SEQ(PK,FK), 제목, 질문내용

TBL_POST_LINK 포스팅 SEQ(PK,FK), URL, 제목, 내용

TBL_POST_QUOTE 포스팅 SEQ(PK,FK), 격언내용, 출처

Page 34: tumblr.com 에 대한 DB구조 분석

ERD 테이블 !34•테마

Table AttributesTBL_THEME 테마SEQ(PK,AI), 제작자 유저 SEQ(FK), 제목, 요약, 내용, 소스코드, 섬네일URL, 유/무료 옵션, 가격, 카테고리 SEQ(FK), 뷰카운트, 판매숫자

TBL_THEME_SCREENSHOT 스크린샷 SEQ(PK,AI), 테마SEQ(FK), 스크린샷 URL

TBL_CATEGORIES 카테고리 SEQ(PK,AI), 카테고리명

Page 35: tumblr.com 에 대한 DB구조 분석

!35

정규화

Page 36: tumblr.com 에 대한 DB구조 분석

정규화•사용자

!36Related Schema 사용자(사용자SEQ(PK,AI), 사용자ID, 비밀번호, 이메일, 가입일자,사 용자프로필사진URL,상태(0:탈퇴 1:가입 2:일시

정지), 탈퇴일자, 정보수정일자, 사용언어, 사용 포스팅 툴)

Functional Dependency 사용자 SEQ -> TBL_USER

BCNF 사용자 SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 친구목록(친구목록SEQ(PK,AI), 친구 SEQ(FK), 사용자 SEQ(FK))

Functional Dependency 친구목록SEQ -> 친구목록

BCNF 친구목록SEQ 가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 구매목록(구매목록SEQ(PK,AI), 구매한사용자SEQ(FK), 구매한 테마 SEQ(FK), 구매일자, 구매방법)

Functional Dependency 구매목록SEQ -> 구매목록

BCNF 구매목록SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 좋아요목록(좋아요목록 SEQ(PK,AI), 좋아요 일자, 좋아요한 포스트 SEQ(FK), 좋아요한 사용자 SEQ(FK))

Functional Dependency 좋아요목록 SEQ -> 좋아요목록

BCNF 좋아요목록 SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Page 37: tumblr.com 에 대한 DB구조 분석

정규화•블로그

!37Related Schema 블로그(블로그SEQ(PK,AI), 블로그 제목, 만든이 ID(FK), URL, 블로그 설명, 작성일자, 방문자)

Functional Dependency 블로그SEQ -> 블로그

BCNF 블로그SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 블로그 옵션(블로그 옵션 SEQ(PK,AI), 미리보기옵션, 페이지당 포스트갯수, 텀블러 공유 옵션, 모바일 레이아웃 옵션, 새창으로 옵션)

Functional Dependency 친구목록SEQ -> 친구목록

BCNF 친구목록SEQ 가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 블로그 보기 옵션(블로그 보기 옵션 SEQ(PK,AI), 작은 레이아웃 옵션, 빨간배경 옵션, 파란배경 옵션, 칼라 상단바 옵션, 날짜숨기기 옵션, 배경숨기기 옵션, 탭 숨기기 옵션, 노트 숨기기 옵션, 동적크기 옵션, 무한스크롤 옵션, 소셜링크버튼 없애기 옵션)

Functional Dependency 블로그 보기 옵션SEQ -> 블로그 보기 옵션

BCNF 블로그 보기 옵션SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 블로그 소셜(블로그 소셜 SEQ(PK,AI), Github URL, 비핸스 URL, 포스퀘어 URL, 라스트FM URL, 구글분석도구 URL, 트위터 URL, 페이스북 URL, 드리블 URL, 플리커 URL, 스카이프 URL, 데비안아트 URL, 비메오 URL, 디스쿼스 URL)

Functional Dependency 블로그 소셜 SEQ -> 블로그 소셜

BCNF 블로그 소셜 SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Page 38: tumblr.com 에 대한 DB구조 분석

정규화•포스트

!38Related Schema 포스팅(포스팅SEQ(PK,AI), 블로그 SEQ(FK), 포스트 타입(0 : 글 1 : 사진 2 : 인용구 3 : 링크 4 : 채팅 5 : 오디오 6 : 동영상), 작성일, 수정일,

작성자IP, 사용자임의URL, 옵션1, 출처URL, 조회수, 라이크한 수)

Functional Dependency 포스팅SEQ -> 포스팅

BCNF 포스팅SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 태그(태그SEQ(PK,AI), 포스트SEQ(fk), 태그이름)

Functional Dependency 태그 SEQ -> 태그

BCNF 태그SEQ 가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 글(포스팅 SEQ(PK,FK), 제목, 내용)

Functional Dependency 포스팅SEQ -> 글

BCNF 포스팅 SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 사진(포스팅 SEQ(PK,FK), 내용)

Functional Dependency 포스팅 SEQ -> 사진

BCNF 포스팅 SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Page 39: tumblr.com 에 대한 DB구조 분석

정규화•포스트

!39Related Schema 이미지 목록(이미지 SEQ(PK,FK), 내용, URL)

Functional Dependency 이미지 SEQ -> 이미지

BCNF 이미지 SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 오디오(포스팅SEQ(PK,FK), URL)

Functional Dependency 포스팅 SEQ -> 오디오

BCNF 포스팅 SEQ 가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 비디오(포스팅 SEQ(PK,FK), URL, 내용)

Functional Dependency 포스팅 SEQ -> 비디오

BCNF 포스팅 SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 채팅(포스팅 SEQ(PK,FK), 제목, 질문내용)

Functional Dependency 포스팅 SEQ -> 채팅

BCNF 포스팅 SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Page 40: tumblr.com 에 대한 DB구조 분석

정규화•포스트

!40Related Schema 링크(포스팅 SEQ(PK,FK), URL, 제목, 내용)

Functional Dependency 포스팅 SEQ -> 링크

BCNF 포스팅 SEQ가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Related Schema 격언(포스팅 SEQ(PK,FK), 격언내용, 출처)

Functional Dependency 포스팅 SEQ -> 격언

BCNF 포스팅 SEQ 가 위치를 결정하는 유일한 결정자이자 후보키이므로 BCNF를 만족한다.

Page 41: tumblr.com 에 대한 DB구조 분석

!41

질의 리스트

Page 42: tumblr.com 에 대한 DB구조 분석

질의 리스트•사용자 테이블 생성(TBL_USER)

CREATE TABLE `TBL_USER` ( `SEQ` INT(11) NOT NULL, `USER_ID` VARCHAR(20) NOT NULL, `PASSWORD` VARCHAR(20) NOT NULL, `EMAIL` VARCHAR(100) NOT NULL, `USER_STATUS_SEQ` INT(11) NOT NULL, `USER_NAME` VARCHAR(20) NOT NULL, `JOIN_DATE` DATETIME NOT NULL, `USER_PROFILE_URL` VARCHAR(256) NULL DEFAULT NULL, `STATUS` INT(11) NULL DEFAULT NULL COMMENT '0 : 탈퇴 1 : 가입',

`DROP_DATE` DATE NULL DEFAULT NULL, `MODIFY_DATE` DATE NULL DEFAULT NULL, `LANGUAGE` VARCHAR(512) NOT NULL, `IS_EDIT_TOOL` VARCHAR(512) NOT NULL, PRIMARY KEY (`SEQ`))

!42

Page 43: tumblr.com 에 대한 DB구조 분석

질의 리스트•블로그 테이블 생성(TBL_BLOG)

CREATE TABLE `TBL_BLOG` ( `SEQ` INT(11) NOT NULL, `BLOG_TITLE` VARCHAR(512) NOT NULL, `SEQ_USER` INT(11) NOT NULL, `URL` VARCHAR(512) NOT NULL, `BLOG_DETAIL` VARCHAR(2048) NULL DEFAULT NULL, `CREATE_DATE` DATETIME NOT NULL DEFAULT getdate(), `HIT_VISITOR` INT(11) NULL, PRIMARY KEY (`SEQ`), INDEX `tbl_user_tbl_blog_fk` (`SEQ_USER` ASC), CONSTRAINT `tbl_user_tbl_blog_fk ̀ FOREIGN KEY (`SEQ_USER`) REFERENCES `mydb`.`TBL_USER` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)

!43

Page 44: tumblr.com 에 대한 DB구조 분석

질의 리스트•포스팅 테이블 생성(TBL_POSTS)

CREATE TABLE `TBL_POSTS` ( `SEQ` int(11) NOT NULL, `SEQ_BLOG` int(11) NOT NULL, `POST_TYPE` int(11) DEFAULT NULL COMMENT '1 : 글 2 : 그림 3 : 오디오 4 : 비디오 5 : 인용구',

`CREATE_DATE` datetime NOT NULL, `MODIFY_DATE` date DEFAULT NULL, `WRITER_IP` varchar(128) DEFAULT NULL, `CUSTOM_URL` varchar(256) DEFAULT NULL, `OPT1` int(11) DEFAULT NULL COMMENT '1 : 허용 0 : 불가',

`REFERENCE_URL` varchar(256) DEFAULT NULL, `HIT_VIEWER` int(11) NOT NULL, `HIT_LIKE` int(11) NOT NULL, PRIMARY KEY (`SEQ`), KEY `tbl_blog_tbl_posts_fk` (`SEQ_BLOG`), CONSTRAINT `tbl_blog_tbl_posts_fk` FOREIGN KEY (`SEQ_BLOG`) REFERENCES `TBL_BLOG` (`SEQ`) ON DELETE CASCADE ON UPDATE ASCADE)

!44

Page 45: tumblr.com 에 대한 DB구조 분석

질의 리스트•테마 테이블 생성(TBL_THEME)

CREATE TABLE `TBL_THEME` ( `SEQ` int(11) NOT NULL, `SEQ_USER` int(11) NOT NULL, `TITLE` varchar(2048) NOT NULL, `SUMMARY` varchar(2048) NOT NULL, `DETAIL` varchar(2048) NOT NULL, `SOURCE_CODE` varchar(4086) NOT NULL, `THUMBNAIL_URL` varchar(512) NOT NULL, `OPT_FREE_OR_PAID` tinyint(1) DEFAULT NULL COMMENT '0 : 무료 1 : 유료',

`PRICE` int(11) NOT NULL DEFAULT '0', `SEQ_CATEGORY` int(11) NOT NULL, `HIT_VIEW` int(11) NOT NULL DEFAULT '0', `HIT_SELL` int(11) NOT NULL, PRIMARY KEY (`SEQ`), KEY `tbl_user_tbl_theme_fk` (`SEQ_USER`), KEY `fk_TBL_THEME_TBL_CATEGORIES1_idx` (`SEQ_CATEGORY`), CONSTRAINT `tbl_user_tbl_theme_fk` FOREIGN KEY (`SEQ_USER`) REFERENCES `TBL_USER` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `fk_TBL_THEME_TBL_CATEGORIES1` FOREIGN KEY (`SEQ_CATEGORY`) REFERENCES `TBL_CATEGORIES` (`SEQ`) ON DELETE NO ACTION

ON UPDATE NO ACTION)

!45

Page 46: tumblr.com 에 대한 DB구조 분석

질의 리스트•블로그 옵션 테이블 생성(TBL_BLOG_OPTION)

CREATE TABLE `TBL_BLOG_OPTION` ( `SEQ` int(11) NOT NULL, `OPT_PRE_VIEW` tinyint(1) NOT NULL DEFAULT '0', `NO_POST_BY_PAGE` int(11) NOT NULL DEFAULT '20', `OPT_SHARE_TUMBLR` tinyint(1) NOT NULL, `OPT_IS_USE_MOBILE_LAYOUT` tinyint(1) NOT NULL DEFAULT '0', `OPT_NEW_LINK` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`SEQ`), CONSTRAINT `tbl_blog_tbl_blog_option_fk` FOREIGN KEY (`SEQ`) REFERENCES `TBL_BLOG` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)

!46

Page 47: tumblr.com 에 대한 DB구조 분석

질의 리스트•블로그 옵션 테이블 생성(TBL_BLOG_OPTION)

CREATE TABLE `TBL_BLOG_SOCIAL` ( `SEQ` int(11) NOT NULL, `GITHUB` varchar(256), `BEHANCE` varchar(256), `FOURSQUARE` varchar(256), `LAST_FM` varchar(256), `GOOGLE_ANALYTICS_ID` varchar(256), `TWITTER` varchar(256), `FACEBOOK` varchar(256), `DRIBBLE` varchar(256), `FLICKR` varchar(256), `SKYPE` varchar(256), `DEVIANART` varchar(256), `VIMEO` varchar(256), `DISQUS` varchar(256), PRIMARY KEY (`SEQ`), CONSTRAINT `tbl_blog_tbl_blog_social_fk` FOREIGN KEY (`SEQ`) REFERENCES `TBL_BLOG` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)

!47

Page 48: tumblr.com 에 대한 DB구조 분석

질의 리스트•블로그 뷰 옵션 테이블 생성(TBL_VIEW_OPTION)

CREATE TABLE `TBL_BLOG_VIEW_OPT` ( `SEQ` int(11) NOT NULL, `OPT_SMALLER_NAV_FOR_PAGES` tinyint(1) NOT NULL DEFAULT '0', `OPT_RED_BACKGROUND` tinyint(1) NOT NULL DEFAULT '0', `OPT_BLUE_BACKGROUND` tinyint(1) NOT NULL DEFAULT '0', `OPT_HIDE_COLORED_TOP_BAR` tinyint(1) NOT NULL DEFAULT '0', `HIDE_DATE` tinyint(1) NOT NULL DEFAULT '0', `HIDE_BACKGROUND_TEXTURE` tinyint(1) NOT NULL DEFAULT '0', `HIDE_TABS` tinyint(1) NOT NULL DEFAULT '0', `HIDE_NOTES` tinyint(1) NOT NULL DEFAULT '0', `ALIGN_NAVIGATION_WITH_DESCRIPTION` tinyint(1) NOT NULL DEFAULT '0', `INFINITE_SCROLL` tinyint(1) NOT NULL DEFAULT '0', `HIDE_SOCIAL_BUTTON` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`SEQ`), CONSTRAINT `tbl_blog_tbl_blog_view_opt_fk` FOREIGN KEY (`SEQ`) REFERENCES `TBL_BLOG` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)

!48

Page 49: tumblr.com 에 대한 DB구조 분석

질의 리스트•카테고리 테이블 생성(TBL_CATEGORIES)

CREATE TABLE `TBL_CATEGORIES` ( `SEQ` int(11) NOT NULL, `NAME` varchar(256) NOT NULL, PRIMARY KEY (`SEQ`) )

!49

Page 50: tumblr.com 에 대한 DB구조 분석

질의 리스트•친구목록 테이블 생성(TBL_FRIENDS)

CREATE TABLE `TBL_FRIENDS` ( `SEQ` int(11) NOT NULL, `SEQ_FRIEND` int(11) NOT NULL, `SEQ_USER` int(11) NOT NULL, PRIMARY KEY (`SEQ`), KEY `tbl_user_tbl_friends_fk` (`SEQ_USER`), KEY `tbl_user_tbl_friends_fk1` (`SEQ_FRIEND`), CONSTRAINT `tbl_user_tbl_friends_fk1` FOREIGN KEY (`SEQ_FRIEND`) REFERENCES `TBL_USER` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `tbl_user_tbl_friends_fk` FOREIGN KEY (`SEQ_USER`) REFERENCES `TBL_USER` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)!

!50

Page 51: tumblr.com 에 대한 DB구조 분석

질의 리스트•포스팅 테이블 생성(TBL_POSTS)

CREATE TABLE `TBL_POSTS` ( `SEQ` int(11) NOT NULL, `SEQ_BLOG` int(11) NOT NULL, `POST_TYPE` int(11) DEFAULT NULL COMMENT '1 : 글 2 : 그림 3 : 오디오 4 : 비디오 5 : 인용구’, `CREATE_DATE` datetime NOT NULL, `MODIFY_DATE` date DEFAULT NULL, `WRITER_IP` varchar(128) DEFAULT NULL, `CUSTOM_URL` varchar(256) DEFAULT NULL, `OPT1` int(11) DEFAULT NULL COMMENT '1 : 허용 0 : 불가’, `REFERENCE_URL` varchar(256) DEFAULT NULL, `HIT_VIEWER` int(11) NOT NULL, `HIT_LIKE` int(11) NOT NULL, PRIMARY KEY (`SEQ`), KEY `tbl_blog_tbl_posts_fk` (`SEQ_BLOG`), CONSTRAINT `tbl_blog_tbl_posts_fk` FOREIGN KEY (`SEQ_BLOG`) REFERENCES `TBL_BLOG` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)!

!51

Page 52: tumblr.com 에 대한 DB구조 분석

질의 리스트•태그 테이블 생성(TBL_TAGS)

CREATE TABLE `TBL_TAGS` ( `SEQ` int(11) NOT NULL, `SEQ_POST` int(11) NOT NULL, `TAG_NAME` varchar(256) NOT NULL, PRIMARY KEY (`SEQ`), KEY `tbl_posts_tbl_tags_fk` (`SEQ_POST`), CONSTRAINT `tbl_posts_tbl_tags_fk` FOREIGN KEY (`SEQ_POST`) REFERENCES `TBL_POSTS` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)!

!52

Page 53: tumblr.com 에 대한 DB구조 분석

질의 리스트•포스팅 – 글 테이블 생성(TBL_POST_WRITINGS)

CREATE TABLE `TBL_POST_WRITINGS` ( `SEQ_POST` int(11) NOT NULL, `TITLE` varchar(512) NOT NULL, `CONTENT` varchar(2048) NOT NULL, PRIMARY KEY (`SEQ_POST`), CONSTRAINT `tbl_posts_tbl_writings_fk` FOREIGN KEY (`SEQ_POST`) REFERENCES `TBL_POSTS` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)!

!53

Page 54: tumblr.com 에 대한 DB구조 분석

질의 리스트•포스팅 – 이미지 목록 테이블 생성(TBL_POST_IMAGE_LIST)

CREATE TABLE `TBL_POST_IMAGE_LIST` ( `SEQ` int(11) NOT NULL, `SEQ_IMAGE` int(11) NOT NULL, `IMG_URL` varchar(45) NOT NULL, PRIMARY KEY (`SEQ`), KEY `tbl_post_image_tbl_post_image_list_fk` (`SEQ_IMAGE`), CONSTRAINT `tbl_post_image_tbl_post_image_list_fk` FOREIGN KEY (`SEQ_IMAGE`) REFERENCES `TBL_POST_IMAGE` (`SEQ_POST`) ON DELETE CASCADE ON UPDATE CASCADE)!

!54

Page 55: tumblr.com 에 대한 DB구조 분석

질의 리스트•포스팅 – 인용구 테이블 생성(TBL_POST_QUOTE)

CREATE TABLE `TBL_POST_QUOTE` ( `SEQ` int(11) NOT NULL, `QUOTE` varchar(2048) NOT NULL, `REFERENCE` varchar(2048) NOT NULL, PRIMARY KEY (`SEQ`), CONSTRAINT `tbl_posts_tbl_quote_fk` FOREIGN KEY (`SEQ`) REFERENCES `TBL_POSTS` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)!

!55

Page 56: tumblr.com 에 대한 DB구조 분석

질의 리스트•포스팅 – 링크 테이블 생성(TBL_POST_LINK)

CREATE TABLE `TBL_POST_LINK` ( `SEQ` int(11) NOT NULL, `URL` varchar(512) NOT NULL, `TITLE` varchar(512) NOT NULL, `DETAIL` varchar(2048) NOT NULL, PRIMARY KEY (`SEQ`), CONSTRAINT `tbl_posts_tbl_post_link_fk` FOREIGN KEY (`SEQ`) REFERENCES `TBL_POSTS` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)!

!56

Page 57: tumblr.com 에 대한 DB구조 분석

질의 리스트•포스팅 – 채팅 테이블 생성(TBL_POST_CHAT)

CREATE TABLE `TBL_POST_CHAT` ( `SEQ` int(11) NOT NULL, `TITLE` varchar(256) NOT NULL, `QUESTION` varchar(2048) NOT NULL, PRIMARY KEY (`SEQ`), CONSTRAINT `tbl_posts_tbl_post_chat_fk` FOREIGN KEY (`SEQ`) REFERENCES `TBL_POSTS` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)!

!57

Page 58: tumblr.com 에 대한 DB구조 분석

질의 리스트•포스팅 – 오디오 테이블 생성 (TBL_POST_AUDIO)

CREATE TABLE `TBL_POST_AUDIO` ( `SEQ` int(11) NOT NULL, `URL` varchar(1024) NOT NULL, PRIMARY KEY (`SEQ`), CONSTRAINT `tbl_posts_tbl_post_audio_fk` FOREIGN KEY (`SEQ`) REFERENCES `TBL_POSTS` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)!

!58

Page 59: tumblr.com 에 대한 DB구조 분석

질의 리스트•포스팅 - 비디오 테이블 생성 (TBL_POST_VIDEO)

CREATE TABLE `TBL_POST_VIDEO` ( `SEQ` int(11) NOT NULL, `URL` varchar(1024) NOT NULL, `CONTENT` varchar(2048) NOT NULL, PRIMARY KEY (`SEQ`), CONSTRAINT `tbl_posts_tbl_post_video_fk` FOREIGN KEY (`SEQ`) REFERENCES `TBL_POSTS` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE)!

!59

Page 60: tumblr.com 에 대한 DB구조 분석

질의 리스트•테마 테이블 생성 (TBL_THEME)

CREATE TABLE `TBL_THEME` (! `SEQ` int(11) NOT NULL,! `SEQ_USER` int(11) NOT NULL,! `TITLE` varchar(2048) NOT NULL,! `SUMMARY` varchar(2048) NOT NULL,! `DETAIL` varchar(2048) NOT NULL,! `SOURCE_CODE` varchar(4086) NOT NULL,! `THUMBNAIL_URL` varchar(512) NOT NULL,! `OPT_FREE_OR_PAID` tinyint(1) DEFAULT NULL COMMENT '0 : 무료 1 : 유료',! `PRICE` int(11) NOT NULL DEFAULT '0',! `SEQ_CATEGORY` int(11) NOT NULL,! `HIT_VIEW` int(11) NOT NULL DEFAULT '0',! `HIT_SELL` int(11) NOT NULL,! PRIMARY KEY (`SEQ`),! KEY `tbl_user_tbl_theme_fk` (`SEQ_USER`),! KEY `fk_TBL_THEME_TBL_CATEGORIES1_idx` (`SEQ_CATEGORY`),! CONSTRAINT `tbl_user_tbl_theme_fk` FOREIGN KEY (`SEQ_USER`) REFERENCES `TBL_USER` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE,! CONSTRAINT `fk_TBL_THEME_TBL_CATEGORIES1` FOREIGN KEY (`SEQ_CATEGORY`) REFERENCES `TBL_CATEGORIES` (`SEQ`) ON DELETE NO ACTION ON UPDATE NO ACTION!)

!60

Page 61: tumblr.com 에 대한 DB구조 분석

질의 리스트•테마 스크린샷 테이블 생성 (TBL_THEME_SCREENSHOT)

CREATE TABLE `TBL_THEME_SCREENSHOT` (! `SEQ` int(11) NOT NULL,! `SEQ_THEME` int(11) NOT NULL,! `SCREENSHOT_URL` varchar(512) NOT NULL,! PRIMARY KEY (`SEQ`),! KEY `tbl_theme_tbl_theme_screenshot_fk` (`SEQ_THEME`),! CONSTRAINT `tbl_theme_tbl_theme_screenshot_fk` FOREIGN KEY (`SEQ_THEME`) REFERENCES `TBL_THEME` (`SEQ`) ON DELETE CASCADE ON UPDATE CASCADE!)

!61

Page 62: tumblr.com 에 대한 DB구조 분석

질의 리스트•새 사용자 추가

INSERT INTO `tbl_user` (`SEQ`, `USER_ID`, `PASSWORD`, `EMAIL`, `USER_NAME`, `JOIN_DATE`, `USER_PROFILE_URL`, `STATUS`, `DROP_DATE`, `MODIFY_DATE`, `LANGUAGE`, `IS_EDIT_TOOL`, `TBL_LIKE_LIST_SEQ`)!VALUES!! (4, 'lee', '1231', '[email protected]', '이정훈', now(), 'www.haha.com/het.png', 1, NULL, NULL, 'KOR', '2', 0);!

!62

Page 63: tumblr.com 에 대한 DB구조 분석

질의 리스트•회원 정지처리 & 탈퇴

update TBL_USER set state = 2 where user_id = ‘lee’ ‘ 회원정지!!update TBL_USER set state = 0 where user_id = ‘lee' ‘ 탈퇴

!63

* 사용자의 경우 state 1이 회원가입 상태, 0이 탈퇴상태, 2가 회원정지 상태

Page 64: tumblr.com 에 대한 DB구조 분석

질의 리스트•친구 추가

INSERT INTO `tbl_friends` (`SEQ`,`SEQ_FRIEND`,`SEQ_USER`)VALUES (0, !(select SEQ from tbl_user where user_name=‘장익환’ limit 1), !(select SEQ from tbl_user where user_name=‘강수현’ limit 1)),!(0, !(select SEQ from tbl_user where user_name=‘장익환’ limit 1), !(select SEQ from tbl_user where user_name=‘황정윤’ limit 1));

!64

* 위의 경우는 이름이 장익환인 회원에게 이름이 강수현, 황정윤 인 친구를 추가하는 질의

Page 65: tumblr.com 에 대한 DB구조 분석

질의 리스트•블로그 만들기(기본옵션)

INSERT INTO `tbl_blog` (`SEQ`, `BLOG_TITLE`, `SEQ_USER`, `URL`, `BLOG_DETAIL`, `CREATE_DATE`, `HIT_VISITOR`)!VALUES!! (3, '강\'s blog', 3, 'kang.soo', '깡수의 블로그', '2013-12-02 00:00:00', 12423424);!

!65

Page 66: tumblr.com 에 대한 DB구조 분석

질의 리스트•새 포스트 등록(글)

INSERT INTO `tbl_posts` (`SEQ`, `SEQ_BLOG`, `POST_TYPE`, `CREATE_DATE`, `MODIFY_DATE`, `WRITER_IP`, `CUSTOM_URL`, `OPT1`, `REFERENCE_URL`, `HIT_VIEWER`, `HIT_LIKE`)!VALUES!! (0, 0, 0, '2013-03-02 00:00:00', NULL, '211.238.145.12', NULL, NULL, NULL, 1234, 123);!!INSERT INTO `tbl_post_writings` (`SEQ_POST`, `TITLE`, `CONTENT`)!VALUES!! (0, '오늘 일기', '오늘 나는 뭐하고 놀까 싶었다.<br /> 그러다 보니 어느덧 시간은 다되고...<br/> 허허허허...');!

!66

Page 67: tumblr.com 에 대한 DB구조 분석

질의 리스트•모든 회원의 등록된 글을 DESC순서로 가져오는 질의

select!! A.SEQ,A.POST_TYPE ,(case A.POST_TYPE !! ! when 0 then (select title from TBL_POST_WRITINGS where SEQ = A.SEQ)!! ! when 1 then (select content from TBL_POST_IMAGE where SEQ = A.SEQ)!! ! when 2 then (select quote from TBL_POST_QUOTE where SEQ = A.SEQ)!! ! when 3 then (select title from TBL_POST_LINK where SEQ = A.SEQ)!! ! when 4 then (select title from TBL_POST_CHAT where SEQ = A.SEQ)!! ! when 5 then (select url from TBL_POST_AUDIO where SEQ = A.SEQ)!! ! when 6 then (select content from TBL_POST_VIDEO where SEQ = A.SEQ)!! end) AS TITLE,A.CREATE_DATE,C.USER_NAME,A.HIT_VIEWER!from!! TBL_POSTS A,!! TBL_BLOG B,!! TBL_USER C!where!! A.SEQ_BLOG = B.SEQ!! and B.SEQ_USER = C.SEQ!order by A.HIT_VIEWER desc

!67

Page 68: tumblr.com 에 대한 DB구조 분석

질의 리스트•내 친구가 등록한 글 목록

select !! (select user_name from tbl_user where seq = B.seq_user) AS USER_NAME,! A.CREATE_DATE,!! A.HIT_VIEWER,!! A.HIT_LIKE from !! tbl_posts A,!! tbl_blog B!where !! A.`SEQ_BLOG` = B.`SEQ` !! and B.`SEQ_USER` in !! ! (select SEQ_FRIEND from tbl_friends !! ! where SEQ_USER = !! ! ! (select user_name from tbl_user where email='[email protected]’)!! ! )

!68

Page 69: tumblr.com 에 대한 DB구조 분석

질의 리스트•내 친구가 등록한 글 중 가장 Like가 많은 글

select !! (select user_name from tbl_user where seq = B.seq_user) AS USER_NAME,! A.CREATE_DATE,!! A.HIT_VIEWER,!! A.HIT_LIKE from !! tbl_posts A,!! tbl_blog B!where !! A.`SEQ_BLOG` = B.`SEQ` !! and B.`SEQ_USER` in !! ! (select SEQ_FRIEND from tbl_friends !! ! where SEQ_USER = !! ! ! (select user_name from tbl_user where email='[email protected]’)!! ! )!order by A.HIT_LIKE DESC LIMIT 1

!69

Page 70: tumblr.com 에 대한 DB구조 분석

질의 리스트•날짜별 등록된 포스트 갯수

select!! C.CREATE_DATE,!! (SELECT COUNT(*) FROM tbl_posts where create_date = C.CREATE_DATE) AS NUM_WRITING_POST!from!! tbl_user A,!! tbl_blog B,!! tbl_posts C!where!! A.SEQ = B.SEQ_USER!! and B.SEQ = C.SEQ_BLOG!group by C.CREATE_DATE

!70

Page 71: tumblr.com 에 대한 DB구조 분석

질의 리스트•일자별 가입자 숫자

select!! A.JOIN_DATE,!! (SELECT COUNT(*) FROM tbl_user where join_date = A.JOIN_DATE) AS NUM_JOIN_USER!from!! tbl_user A!group by A.JOIN_DATE

!71

Page 72: tumblr.com 에 대한 DB구조 분석

질의 리스트•사용자별 방문자 순위

select!! A.user_name,!! B.BLOG_TITLE,!! B.HIT_VISITOR!from!! tbl_user A,!! tbl_blog B!where!! A.SEQ = B.SEQ_USER!order by B.`HIT_VISITOR` desc

!72

Page 73: tumblr.com 에 대한 DB구조 분석

질의 리스트•방문자가 1000명 이상인 사용자의 블로그

select!! A.user_name,!! B.BLOG_TITLE,!! B.HIT_VISITOR!from!! tbl_user A,!! tbl_blog B!where!! A.SEQ = B.SEQ_USER!! and B.HIT_VISITOR > 1000

!73

Page 74: tumblr.com 에 대한 DB구조 분석

질의 리스트•카테고리가 ‘벤처 기업’ 인 테마 목록

select!! *!from!! tbl_theme A,!! tbl_user B,!! tbl_categories C!where!! A.SEQ_CATEGORY = C.SEQ!! and A.SEQ_USER = B.SEQ!! and C.name = '벤처 기업'

!74

Page 75: tumblr.com 에 대한 DB구조 분석

thanks!

www.izectlab.com

감사합니다.