DB 스키마 짜기

prj004

Wed, 13 Nov 2019

DB 스키마 설계

  • 플랫폼 크롤러는 DB는 MySQL로 만들 예정이다.
  • 프로젝트003 에 이어서 진행이 되고 selenium으로 가져온 데이터들을 DB에 우선 넣어 보고자 해서 DB를 우선적으로 만들기로 하였다. (뭔가 순서가 뒤죽박죽이다. 환경 셋업 -> DB 설계 -> server 구축 -> selenium 또는 api로 데이터 가져오기 이 순서가 맞는건가? 도커 셋업부터 해야 하나?)
  • 관계형 데이터베이스 설계 및 구축 를 따라서 DB 스키마를 설계해 보겠다.

DB 관계형 데이터 베이스 설계

관계형 데이터베이스를 설계하는 방법에는 주로 2가지 방법이 사용된다고 한다.

  • E-R 모델과 릴레이션 변환 규칙을 이용한 설계
  • 정규화를 이용한 설계

E-R 모델과 릴레이션 변환 규칙을 이용한 설계는 아래 단계를 거쳐 데이터베이스를 생성한다.

  1. 데이터 요구사항에 대한 분석 (결과 : 요구사항 명세서)
  2. 개념 스키마 설계 (결과 : ERD)
  3. 논리 스키마 설계 (결과 : 릴레이션 스키마의 테이블 명세서)
  4. 내부 스키마 설계 (결과 : DB 스키마 생성 SQL 문)

1. 데이터 요구사항에 대한 분석

내가 원하는 데이터베이스의 요구사항은 아래와 같다.

  • 인플루언서는 ID, 생성일, 주소, 이미지, 이름, 플랫폼의 정보를 가지고 있다.
  • 인플루언서의 비디오는 비디오 각각의 데이터와 비디오의 총 데이터를 가지고 있다.

    • 각각의 비디오는 이름, 조회수, 좋아요, 댓글, 댓글 수를 가지고 있다
    • 총 비디오는 비디오 개수, 비디오 총 좋아요, 비디오 총 시청 수, 비디오 총 댓글 수를 가지고 있다.
  • 인플루언서는 구독자 수의 데이터를 가지고 있는데 구독자 수는 증가하거나 감소한다.

아래는 조금 더 구체적으로

  • 매일 플랫폼들의 데이터들을 가져와서 저장이 되어야 한다.
  • 인플루언서 : ID, 생성일, 주소, 이미지, 이름, 플랫폼

    • 인플루언서의 기본적인 데이터이다. 거의 변하지 않는다.
    • 인플루언서는 기본으로 하나가 존재하고 플랫폼 별로 최대 3개가 존재 가능하다.
    • 인플루언서의 수는 계속 증가한다.
  • 인플루언서 - 각 비디오 : 각각의 비디오 이름, 비디오 조회수, 비디오 좋아요(?),
  • 인플루언서 - 총 비디오 : 비디오 총 개수, 비디오 총 좋아요 수, 비디오 총 시청 수, 비디오 총 댓글 수(일간, 주간, 월간 차이)

    • 인플루언서의 비디오의 데이터이다. 일간 주간 월간의 차이가 저장이 되어야 한다. (꼭 주간, 월간 차이가 필요 할까? 일간 차이로 계산을 하면 되지 않을까?)
    • 총 비디오는 각각의 비디오에서 더하는것이 나을지? 크롤링 하는게 나을지(우선은 각각의 비디오에서 더하는게 나을 듯 하다)
  • 인플루언서 - 구독자 : 구독자 수(일간, 주간, 월간 차이)

    • 인플루언서의 구독자 수의 데이터이다. 비디오와 동일하게 일간, 주간, 월간의 차이가 저장이 되어야 한다.

2. 개념적 설계로 E-R 다이어그램 만들기

작성한 요구사항 명세서에서 데이터베이스를 구성하는데 필요한 개체, 속성, 개체간의 관계를 추출하여 ERD를 생성합니다.

  • 개체와 속성을 추출한다.

    • 명사로 선별한다.
  • 개체간의 관계를 추출한다.

    • 대부분 동사로 선별한다(개체간의 관계를 나타내는 동사이여야 한다)
    • 관계에 속한 속성도 있을 수 있다
    • 1:1, 1:N, N:M
    • 필수적인 참여, 선택적인 참여

2.1 개체(Entity)와 속성(attribute) 추출

개념적 설계 단계에서 가장 먼저 해야 할 일은 개체를 추출하는 일. 개체는 현실에서의 사물이나 사람이 생각하는 개념. 개체를 나타내는 속성이 있고 여러 관련 속성이 모여 하나의 정보 단위를 이루는것이 개체가 됨. 요구사항에서 개체는 대부분 명사로 이루어져 있지만, 속성과 구별할 필요가 있음.

  • 인플루언서ID, 생성일, 주소, 이미지, 이름, 플랫폼의 정보를 가지고 있다.
  • 인플루언서비디오비디오 각각의 데이터와 비디오 총 데이터를 가지고 있다.

    • 각각의 비디오이름, 조회수, 좋아요, 댓글, 댓글 수를 가지고 있다
    • 총 비디오비디오 개수, 비디오 총 좋아요, 비디오 총 시청 수, 비디오 총 댓글 수를 가지고 있다.
  • 인플루언서는 구독자 수의 데이터를 가지고 있는데 구독자 수는 증가하거나 감소한다.
개체 속성
인플루언서 ID, 생성일, 주소, 이미지, 이름, 플랫폼
구독자 인플루언서 ID, 플랫폼, 구독자 수
각 비디오 인플루언서 ID, 플랫폼, 이름, 조회수, 좋아요, 댓글, 댓글 수
총 비디오 인플루언서 ID, 플랫폼, 비디오 개수, 비디오 총 좋아요, 비디오 총 조회수, 비디오 총 댓글 수
플랫폼 플랫폼 이름(필요 한가?)

2.1 개체간의 관계 추축

개체와 속성이 구별되었다면 개체 간의 관계를 추출한다. 개체 간의 관계도 여러가지로 분류 된다.

  • 일대일(1:1), 일대다(1:N), 다대다(N:M)
  • 관계 : 선택적인 관계, 필수적인 관계
관계 관계에 참여하는 개체 관계유형 관계속성
동등 인플루언서 : 인플루언서는 여러 플랫폼을 가질 수 있다.
플랫폼 : 플랫폼은 여러 인플루언서를 가진다.
N:M 인플루언서 없이 플랫폼이 존재할 수 없다.
귀속 인플루언서 : 인플루언서는 비디오를 가질 수 있다.
비디오 : 비디오는 하나의 인플루언서에 귀속된다.
1:N 인플루언서 없이 비디오가 존재할 수 없다.
보유 인플루언서 : 인플루언서는 총 비디오를 플랫폼별로 하나 가진다. 1:1 인플루언서는 플랫폼 별 하나의 총 비디오를 가진다.
보유 인플루언서 : 인플루언서는 구독자 수를 플랫폼별로 하나 가진다. 1:1 인플루언서는 플랫폼 별 하나의 구독자 수를 가진다.

참고 사이트

Loading...
Upati Sariputa

Upati Sariputa

  • React.js, Node.js, Django
  • 아직 블로그가 완벽하지 않습니다.