[Posting] 블로그 데이터베이스 설계 2부

캡틴 노드랭크·2023년 2월 1일
0

Project

목록 보기
7/7

우선 제가 만들려는 블로그는 어떤식으로 API를 작성할건지 알아보겠습니다.

이번엔 각 테이블 컬럼에 적용될 데이터 타입을 알아봅시다.

숫자형 데이터타입의 고민

int(n)

tinyint(n)

bigint(n)

문자형 데이터타입의 고민

  • char(n)
    고정 길이의 문자열 데이터 형식입니다. 특정 크기를 임의로 지정하면 임의로 지정한 숫자 이하로 문자열 데이터를 저장할 수 있으나, 지정한 크기만큼 저장 됩니다.

char은 고정된 크기를 그대로 저장하기 때문에 제 프로젝트의 데이터 타입 후보로는 탈락입니다.

  • varchar(n)
    가변 길이의 문자열 데이터 형식입니다. 문자열 크기를 바이트 단위로 정의하고 최대 65536 Byte까지 저장할 수 있습니다. 입력받은 문자의 크기를 기준으로 데이터를 저장합니다.

  • text(n)
    char, varchar와는 다른 대용량 문자열 저장할 수 있는 데이터 형식입니다. 최대 길이만 다른 종류는 4가지가 있습니다.
    TINYTEXT``TEXT``MEDIUMTEXT``LONGTEXT

주로 텍스트는 큰 문자열을 저장하는데 사용합니다.

  • blob(n)

Binary Large Object의 약자로 바이너리 형식으로 데이터를 저장합니다. 최대 길이만 다른 종류는 4가지가 있습니다.
TINYBLOB``BLOB``MEDIUMBLOB``LONGBLOB

주로 비정형 데이터 즉, 이미지, 오디오, 비디오 파일, 디지털 서명등을 저장합니다.

데이터 타입과 메인키 적용

유저(USER)

메인키

우선 사용자 테이블의 메인키로 후보군은 몇가지가 있습니다. 사용자아이디,사용자이메일입니다. 사용자 이메일의 경우 서드파티로부터 정보를 가져오기에 고유하다 할 수 있습니다.

두번째로, 사용자 번호(u_id)가 있습니다. AUTO_INCREMENT 혹은 UUID로 유니크한 값을 가질 수 있습니다.

아니면 Access_token을 후보키로 지정할 수 있습니다. UUID나 토큰같은 긴 문자열은 디스크에 기록 성능에 지장을 줄 수 있으므로 효율상 AUTO_INCREAMENT가 더 적합해보입니다.

최종적인 메인키는 u_id, 복합키로 활용될만한 요소는 access_token필드를 추가하거나, 이메일이 되겠습니다.

데이터 타입

  • u_id : 자동 증분 숫자를 활용할 계횝입니다. 숫자형 타입중 int는 범위가 총 10자리입니다. 그 이상을 넣어도 의미가 없기에 int(10)으로 넓은 범위를 지정했습니다.

  • u_name: 유저명이 저장되는 공간입니다. 길이가 대체적으로 짧고 불필요한 용량이 필요하지 않기에 유연한 varchar이 적합해 보입니다.

  • u_mail: 메일명이 저장되는 공간입니다. 마찬가지로 varchar로 적용해줍니다.

  • u_img_url: 사용자 프로필 이미지입니다. 파일을 저장하여 관리하는 것보다 url이나 경로(path)를 찾는 것이 더 효율적일것 같습니다. 문자열 형식의 데이터로 각 이미지명이나 경로에 따라 길이가 다르기때문에 varchar로 주겠습니다.

  • u_provider: 사용자가 소셜로그인시 어떤 유형으로 로그인 했는지 보여줍니다. 3가지 방법을 구상해봤습니다.

    • 단순히 문자열로 저장하기
    • ENUM타입 사용하여 형태만 저장하기
    • tinyint를 사용하여 정수에 따른 구분
  • u_role: 사용자 유형을 관리자인지 유저인지 파악합니다. 현재는 두가지만 필요하므로 tinyint가 적당할 것 같습니다.

최종 형태는 다음과 같습니다.

게시글(POST)

메인키

데이터 타입

댓글(COMMENT)

메인키

데이터 타입

카테고리(CATEGORY)

메인키

데이터 타입

업로드 파일 (UPLOAD_FILES)

메인키

데이터 타입

해시태그(HASHTAG)

메인키

데이터 타입

좋아요(LIKE, AWESOME)

메인키

데이터 타입

profile
다시 처음부터 천천히... 급할필요가 없다.

0개의 댓글