Step-by-Step

[3] 기획 - 데이터 모델링 (2) 테이블 작성 & DB Diagram 본문

프로젝트/Dreamers (Blog)

[3] 기획 - 데이터 모델링 (2) 테이블 작성 & DB Diagram

희주(KHJ) 2023. 1. 26. 17:52

📜이전📜

[2] 기획 - 데이터 모델링 (1) ERD 다이어그램, 정규화

 

 

ERD 

- 사용자를 추가/삭제 할때, [사용자], [사용자 추가 정보] 테이블 두 군데에서 이벤트 발생

 

ERD 설명

1. User

  • 사용자 정보를 담은 테이블
  • 로그인 / 회원가입 시 정보 등록됨
  • 아이디(Key) / 비밀번호 / 닉네임 (default = 아이디) / 권한 (default = User)
  • 아이디 중복 불가능 / 모든 속성 NOT NULL

2. OriginPost

  • 일반 글 정보를 담은는 테이블
  • 글 번호(Key) / 제목 / 내용 / 날짜
  • 글 번호는 Post 테이블의 Key를 외래키로 참조 및 기본키로 등록
  • 날짜는 'YYYY-MM-DD HH:MM:SS' 형식을 따름 (임의로 지정 X , 서버 시간으로 등록)
  • 글 번호 중복 불가능 / 모든 속성 NOT NULL

3. DrawingPost

  • 그림 글 정보를 담은 테이블
  • 글 번호(Key) / 내용 / 날짜 / 템플릿 번호
  • 글 번호는 Post 테이블의 Key를 외래키로 참조 및 기본키로 등록
  • 템플릿 번호는 1~N (N>=1) 의 숫자로 이루어짐
  • 날짜는 OriginPost와 동일
  • 글 번호 중복 불가능 / 모든 속성 NOT NULL

4. Level

  • 사용자의 등급을 담은 테이블
  • 등급(Key) / 글 수
  • 사용자의 포스팅 수가 특정 등급의 글 수 이상일 경우, 가장 높은 등급을 갖게 됨
  • 모든 속성 중복 불가능 / 모든 속성 NOT NULL

5. HashTag

  • 글에 있는 해시태그를 담은 테이블
  • 글 번호(Key) / 해시태그(Key)
  • 해시태그 속성은 원자값으로 구성, 이중 Key 설정
  • (글 번호, 해시태그) 중복 불가능 / 모든 속성 NOT NULL

6. TagRanking

  • 특정 시간 내에 검색된 해시태그와 개수를 담은 테이블
  • 해시태그(Key) / 해시태그 수
  • 해시태그 중복 불가능 / 모든 속성 NOT NULL

7. UserDetails

  • 사용자의 추가 정보를 담은 테이블
  • 제3 정규화 과정에서 분리된 속성인 이메일을 관리
  • 아이디(Key) / 이메일
  • 모든 속성 중복 불가능 / 모든 속성 NOT NULL

8. Post

  • 사용자가 작성한 글 정보를 담은 테이블
  • 글 번호(Key) / 아이디 / 글그림 식별자
  • 글 번호 중복 불가능 / 모든 속성 NOT NULL

9. Grant

  • 사용자의 등급을 담은 테이블
  • 아이디(Key) / 등급
  • 모든 속성 중복 불가능 / 모든 속성 NOT NULL

 

 

DBDiagram

dbdiagram.io 에서 DB 설계도를 작성했다

https://dbdiagram.io/home

 

dbdiagram.io - Database Relationship Diagrams Design Tool

 

dbdiagram.io

 

 

 

DBDiagram (1) SQL 문

// Entity
Table User {
  user_id varchar [pk]  
  password varchar [not null]
  user_name varchar [not null]
  role varchar [not null, default:'user']
}

// If schema name is omitted, it will default to "public" schema.
Table OriginPost {
  post_id int [pk, ref:- Post.post_id]
  post_title varchar [not null]
  post_content varchar [not null]
  post_date dat [not null]
}

Table DrawingPost {
  post_id int [pk, ref:- Post.post_id]
  post_content varchar [not null]
  template_id int [not null]
  post_date varchar [not null]
}

Table Level {
   level int [pk]
   post_cnt int [not null]
}

Table HashTag {
  post_id int [pk, ref:> Post.post_id]
  tag_name varchar [pk]
}

Table TagRanking {
  tag_name varchar [pk]
  tag_cnt int [not null]
}

Table UserDetails {
  user_id varchar [pk, not null]
  email varchar [not null]
}


// Relation
Table Grant {
  user_id varchar [pk, ref:- User.user_id]
  level int [not null, ref:- Level.level]
 }
 
 
Table Post {
  post_id int [pk, increment] // auto-increment
  user_id varchar  [not null, ref: > User.user_id] 
  post_ident int [not null]
}

 

 

DBDiagram (2) diagram

 

Comments