ERD Cloud 보기
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
사용자식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
이메일 |
email |
VARCHAR(255) |
|
Y |
|
|
|
|
권한 |
role |
VARCHAR(30) |
|
Y |
|
|
|
|
카테부 닉네임 |
nickname_kakao |
VARCHAR(20) |
|
|
|
|
|
|
익명 닉네임 |
nickname_community |
VARCHAR(20) |
|
Y |
|
|
|
|
포인트 |
point |
INT |
|
Y |
0 |
|
|
UNSIGNED |
프로필 사진 |
image_path |
VARCHAR(255) |
|
Y |
/basic.png |
|
|
|
활성상태 |
is_active |
BOOLEAN |
|
Y |
TRUE |
|
|
|
인증여부 |
is_verified |
BOOLEAN |
|
Y |
FALSE |
|
|
|
생성일자 |
created_at |
TIMESTAMP |
|
Y |
|
|
|
|
수정일자 |
updated_at |
TIMESTAMP |
|
Y |
created_at |
|
|
|
삭제일자 |
deleted_at |
TIMESTAMP |
|
|
NULL |
|
|
|
항목 |
설명 |
id |
사용자를 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
email |
사용자의 이메일을 나타냅니다. |
role |
사용자의 권한을 나타냅니다. (ADMIN, USER : 관리자, 사용자) |
nickname_kakao |
카카오 인증 후 사용하는 카테부 이름입니다. 로그인 후 첫 사용자 인증 이후 설정 가능하며 최대 20자까지 입력됩니다. |
nickname_community |
커뮤니티 활동 시 사용하는 익명 닉네임입니다. 회원가입 시 랜덤으로 기본값이 제공되며 변경 가능합니다. 최대 20자까지 입력됩니다. |
point |
사용자의 포인트입니다. 기본값은 0이며, 음수는 허용되지 않습니다. |
image_path |
사용자 프로필 이미지 경로입니다. 기본값은 "/basic.png" 입니다. |
is_active |
사용자의 활성 상태를 나타냅니다. 탈퇴 시 30일 유예기간이 제공되며 기본값은 true입니다. |
is_verified |
사용자 인증 여부입니다. 기본값은 false입니다. |
created_at |
사용자 가입 시각입니다. TIMESTAMP 타입입니다. |
updated_at |
마지막 수정 시각입니다. 기본값은 created_at과 같으며, 이후 수정 시 갱신됩니다. |
deleted_at |
회원 탈퇴 시각입니다. 기본값은 NULL입니다. |
- nickname_kakao가 nullable한 이유는 OAuth 가입 후 인증번호를 통한 카테부 사용자 인증 후 사용자가 카테부에서 사용하는 닉네임을 설정하도록 하기 위함이다.
- 설정하지 않으면 포인트로 특가 제품 구매 시 수령 불가
- 설명: 사용자 정보를 관리하는 테이블입니다.
- 기능적 역할
- 한 명의 사용자는 하나의 OAuth 토큰을 가질 수 있어 OAuthToken 테이블과 연결됨 (
1 : 1
)
- 한 명의 사용자는 여러 주문을 진행할 수 있어 Order 테이블과 연결됨 (
1 : N
)
- 한 명의 사용자는 여러 게시글을 작성할 수 있어 Post 테이블과 연결됨 (
1 : N
)
- 한 명의 사용자는 여러 댓글을 작성할 수 있어 Comment 테이블과 연결됨 (
1 : N
)
- 한 명의 사용자는 여러 대댓글을 작성할 수 있어 Recomment 테이블과 연결됨 (
1 : N
)
- 한 명의 사용자는 여러 게시물에 좋아요를 누를 수 있어 Like 테이블과 연결됨 (
1 : N
)
- 한 명의 사용자는 여러 게시물을 스크랩할 수 있어 Bookmark 테이블과 연결됨 (
1 : N
)
- 한 명의 사용자는 여러 알림을 받을 수 있어 Notification 테이블과 연결됨 (
1 : N
)
- 한 명의 사용자는 여러 생성 이미지를 가질 수 있어 AiImage 테이블과 연결됨 (
1 : N
)
OAuth 토큰 테이블 (OAuthTokens)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
OAuth식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
사용자식별자 |
user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
제공기업명 |
provider |
VARCHAR(30) |
|
Y |
|
|
|
|
제공기업번호 |
provider_id |
VARCHAR(50) |
|
Y |
|
|
|
|
접근 토큰 |
access_token |
TEXT |
|
Y |
|
|
|
|
리프레쉬 토큰 |
refresh_token |
TEXT |
|
Y |
|
|
|
|
생성일자 |
created_at |
TIMESTAMP |
|
Y |
|
|
|
|
수정일자 |
updated_at |
TIMESTAMP |
|
Y |
created_at |
|
|
|
항목 |
설명 |
id |
각 토큰의 고유 식별자입니다. BIGINT 타입, 자동 증가, 기본 키(PK)입니다. |
user_id |
어떤 사용자에게 발급된 토큰인지 나타내는 외래 키(FK)입니다. user.id를 참조하며 ON DELETE CASCADE가 적용됩니다. |
provider |
OAuth 제공자 이름입니다. (예: kakao) 일반적으로 12자 ~ 20자 이내로 구성되어 최대 30자로 지정합니다. |
provider_id |
해당 OAuth 제공자에서의 사용자 고유 ID입니다. 일반적으로 20자 ~ 30자 이내로 구성되어 최대 50자로 지정합니다. |
access_token |
API 요청 시 사용하는 접근 토큰입니다. |
refresh_token |
access_token이 만료되었을 때 새로 발급받기 위한 토큰입니다. |
created_at |
토큰 생성 시각입니다. |
updated_at |
토큰 수정 시각입니다. 생성 시 created_at과 같으며 이후 수정되면 갱신됩니다. |
- 설명: 사용자의 OAuth 토큰 정보를 관리하는 테이블입니다.
- 기능적 역할
- 한 명의 사용자는 하나의 OAuth 토큰을 가질 수 있어 User 테이블과 연결됨 (
1 : 1
)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
주문 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
사용자 식별자 |
user_id |
BIGINT |
|
Y |
|
|
Y |
SET NULL(Soft delete) |
제품 식별자 |
product_id |
BIGINT |
|
Y |
|
|
Y |
SET NULL(Soft delete) |
제품 가격 |
price |
INT |
|
Y |
|
|
|
UNSIGNED |
구매 수량 |
count |
INT |
|
Y |
|
|
|
UNSIGNED |
주문상태 |
status |
VARCHAR(30) |
|
Y |
PAID(주문완료) |
|
|
|
주문일시 |
ordered_at |
TIMESTAMP |
|
Y |
|
|
|
|
컬럼명 |
내용 |
id |
주문 정보를 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
user_id |
주문한 사용자 ID입니다. 외래 키(FK)로 user.id를 참조하며, 사용자 삭제 시 SET NULL로 설정됩니다. |
product_id |
주문된 상품의 ID입니다. 외래 키(FK)로 product.id를 참조하며, 상품 삭제 시 SET NULL로 설정됩니다. |
price |
주문 당시의 상품 가격입니다. 음수는 허용되지 않습니다. |
count |
주문 수량입니다. 음수는 허용되지 않습니다. |
status |
주문 상태입니다. (PAID, CONFIRMED, DELIVERED; 결제 완료, 주문 확인, 배송 완료) |
ordered_at |
주문한 시간입니다. TIMESTAMP 타입입니다. |
- price 반정규화(제품 정보 변경 시 이전 정보를 확인할 방법이 없다.)
- 제품가격: 특가 당시에 구입한 품목이 다시 원가로 돌아 갔을 때, 이전에 구입했던 금액을 조회할 방법이 없다.
- 설명: 사용자의 주문 정보를 관리하는 테이블입니다.
- 기능적 역할
- 한 명의 사용자는 여러 주문을 진행할 수 있어 User 테이블과 연결됨 (
1 : N
)
- 하나의 주문은 하나의 상품을 구매할 수 있어 ServiceProduct 테이블과 연결됨 (
1 : 1
)
서비스 상품 테이블 (ServiceProducts)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
상품 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
상품 분류 |
type |
VARCHAR(30) |
|
Y |
|
|
|
|
상품명 |
name |
VARCHAR(30) |
|
Y |
|
|
|
|
상품 설명 |
description |
TEXT |
|
Y |
|
|
|
|
상품 가격 |
point |
INT |
|
Y |
|
|
|
UNSIGNED |
수량 |
stock_quantity |
INT |
|
Y |
|
|
|
UNSIGNED |
판매수 |
sold_count |
INT |
|
Y |
0 |
|
|
UNSIGNED |
스크랩 수 |
scrap_count |
INT |
|
Y |
0 |
|
|
UNSIGNED |
특가상태 |
is_discounted |
BOOLEAN |
|
Y |
FALSE |
|
|
|
판매활성상태 |
is_active |
BOOLEAN |
|
Y |
TRUE |
|
|
|
상품이미지 |
image_path |
VARCHAR(255) |
|
Y |
|
|
|
|
항목 |
내용 |
id |
서비스 상품을 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
type |
상품 분류입니다. (MOUSE, NOTEBOOK : 마우스, 키보드) |
name |
상품명입니다. 최대 30자까지 입력 가능합니다. |
description |
상품에 대한 상세 설명입니다. 최대 1000자까지 입력가능합니다. |
point |
상품 가격입니다. 포인트 단위이며 음수는 허용되지 않습니다. |
stock_quantity |
현재 판매 가능한 수량입니다. |
sold_count |
현재까지 팔린 상품의 수입니다. |
scrap_count |
현재 상품의 스크랩 수입니다. |
is_discounted |
상품이 현재 특가 상태인지 여부를 나타냅니다. 기본값은 ‘false'입니다. |
is_active |
상품의 판매 활성 상태입니다. 기본값은 'true'입니다. |
image_path |
상품 이미지 경로입니다. |
- 설명: 판매하는 상품 정보를 저장하는 테이블입니다.
- 기능적 역할
- 하나의 상품은 여러 주문에 포함될 수 있어 Order 테이블과 연결됨 (
1 : N
)
- 하나의 상품은 하나의 특가 정보만 가져 ServiceDiscountProduct 테이블과 연결됨 (
1 : 1
)
- 하나의 상품은 여러 스크랩을 가질 수 있어 Bookmark 테이블과 연결됨 (
1 : N
)
서비스 특가 상품 테이블 (ServiceDiscountProducts)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
서비스 특가 상품 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
서비스 상품 식별자 |
service_product_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
특가 종류 |
type |
VARCHAR(30) |
|
Y |
|
|
|
|
할인가 |
price |
INT |
|
Y |
|
|
|
UNSIGNED |
할인율 |
rate |
DECIMAL |
|
Y |
|
|
|
|
특가 수량 |
count |
INT |
|
Y |
|
|
|
UNSIGNED |
시작기간 |
started_at |
TIMESTAMP |
|
Y |
|
|
|
|
만료기간 |
expires_at |
TIMESTAMP |
|
Y |
|
|
|
|
항목 |
내용 |
id |
서비스 특가 상품을 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK )입니다. |
service_product_id |
어떤 상품이 특가 대상인지 나타내는 외래 키(FK )입니다. service_product.id 참조, ON DELETE CASCADE . |
type |
특가 종류입니다.(SPECIAL, BASIC : 깜짝특가, 일반특가) |
price |
할인 적용된 가격입니다. 상품 가격 - 상품 가격 x 할인율 의 값으로 저장됩니다. |
rate |
할인율입니다. DECIMAL(2,1) 형식이며 0.1~1.0 범위를 갖습니다. |
count |
특가로 제공되는 수량입니다. |
started_at |
특가 시작 시각입니다. |
expires_at |
특가 종료 시각입니다. |
- 설명: 특가 상품 정보를 저장하는 테이블입니다.
- 기능적 역할
- 하나의 상품은 하나의 특가 이벤트만 가져 ServiceProduct 테이블과 연결됨 (
1 : 1
)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
게시글 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
사용자 식별자 |
user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
분류 |
type |
VARCHAR(30) |
|
Y |
|
|
|
|
제목 |
title |
VARCHAR(26) |
|
Y |
|
|
|
|
본문 |
content |
TEXT |
|
Y |
|
|
|
|
댓글수 |
comment_count |
INT |
|
Y |
0 |
|
|
UNSIGNED |
좋아요수 |
like_count |
INT |
|
Y |
0 |
|
|
UNSIGNED |
조회수 |
view_count |
INT |
|
Y |
0 |
|
|
UNSIGNED |
스크랩 수 |
scrap_count |
INT |
|
Y |
0 |
|
|
UNSIGNED |
작성시간 |
created_at |
TIMESTAMP |
|
Y |
|
|
|
|
수정시간 |
updated_at |
TIMESTAMP |
|
Y |
created_at |
|
|
|
항목 |
내용 |
id |
서비스 특가 상품을 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK )입니다. |
user_id |
어떤 사용자가 게시글을 작성했는지 연결하는 외래 키(FK )입니다. user.id 를 참조하며, 사용자 정보가 삭제될 경우 ON DELETE CASCADE 로 설정합니다. |
type |
게시글 종류를 나타냅니다.(FREE, DESKSETUP : 자유, 데스크셋업) |
title |
게시글 제목을 나타냅니다. 최대 길이를 26자로 지정합니다. |
content |
게시글 내용을 나타냅니다. 타입은 TEXT 로 지정합니다. |
comment_count |
게시글 댓글수를 나타냅니다. 기본값은 0으로 지정합니다. |
like_count |
게시글 좋아요수를 나타냅니다. 기본값은 0으로 지정합니다. |
view_count |
게시글 조회수를 나타냅니다. 기본값은 0으로 지정합니다. |
scrap_count |
추천 데스크 셋업 상품의 스크랩 수입니다. |
created_at |
게시글 작성일자를 나타냅니다. 서버 시간을 반영하기 위해 TIMESTAMP 타입을 사용합니다. |
updated_at |
게시글 수정일자를 나타냅니다. 기본값은 created_at 으로 지정하고 자동 수정 일자 반영을 위해 TIMESTAMP 타입을 사용합니다. |
- is_deleted 추가하고 삭제 시 비즈니스 로직에서 type 체크 후 자유 게시판이면 CASCADE 날리고 생성형 AI 이미지가 포함된 게시글이면 update로 soft delete 진행
- 설명: 게시글 정보를 관리하는 테이블입니다.
- 기능적 역할
- 한 명의 사용자는 여러 게시글을 작성할 수 있어 User 테이블과 연결됨 (
1 : N
)
- 한 개의 게시글에는 여러 이미지 파일이 존재할 수 있어 PostImage 테이블과 연결됨 (
1 : N
)
- 한 개의 게시글에는 하나의 AI 생성 이미지를 등록할 수 있어 AiImage 테이블과 연결됨 (
1 : 1
)
- 한 개의 게시글에 여러 댓글이 달릴 수 있어 Comment 테이블과 연결됨 (
1 : N
)
- 한 개의 게시글은 여러 좋아요를 가질 수 있어 Like 테이블과 연결됨 (
1 : N
)
- 한 개의 게시글은 여러 스크랩을 가질 수 있어 Bookmark 테이블과 연결됨 (
1 : N
)
- 한 개의 게시글에서 여러 알림을 보낼 수 있어 Notification 테이블과 연결됨 (
1 : N
)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
이미지 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
게시글 식별자 |
post_id |
BIGINT |
|
Y |
|
|
Y |
게시글 type이 DESKSETUP일 경우 - SET NULL(Soft delete) 게시글 type이 FREE일 경우 - ON DELETE CASCADE |
정렬 순서 |
sequence |
INT |
|
Y |
|
|
|
UNSIGNED |
이미지 접근 경로 |
image_uuid |
VARCHAR(255) |
|
Y |
|
|
|
|
항목 |
내용 |
id |
이미지를 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
post_id |
이미지가 포함된 게시글 ID입니다. post.id를 참조하며 Post 테이블의 type에 따라 삭제 정책이 다릅니다. |
type |
이미지의 유형입니다. 이미지의 유형입니다.(ORIGINAL, AI, FREE : 원본, AI이미지, 자유게시판) |
sequence |
이미지의 정렬 순서입니다. 게시글 작성 경우에만 값을 입력합니다. |
image_uuid |
이미지 저장 경로입니다. |
- 설명: 서비스에 쓰이는 이미지를 관리하는 테이블입니다.(AI 생성, 게시글)
- 기능적 역할
- 한 개의 게시글은 여러 이미지를 포함할 수 있어 Post 테이블과 연결됨 (
1 : N
)
데스크 셋업 AI 이미지 테이블(AiImages)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
이미지 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
사용자 식별자 |
user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
게시글 식별자 |
post_id |
BIGINT |
|
Y |
0 |
|
|
|
원본사진 |
before_image_path |
VARCHAR(255) |
|
Y |
|
|
|
|
생성사진 |
after_image_path |
VARCHAR(255) |
|
Y |
|
|
|
|
생성일시 |
created_at |
TIMESTAMP |
|
Y |
|
|
|
|
항목 |
내용 |
id |
이미지를 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
user_id |
이미지 소유 사용자 ID입니다. user.id를 참조하며 image_type에 따라 삭제 정책이 다릅니다. |
post_id |
이미지가 포함된 게시글 ID로 논리적 관계로 정의합니다. |
before_image_id |
원본 이미지 저장 경로입니다. |
after_image_id |
AI 생성 이미지 저장 경로입니다. |
created_at |
이미지 생성 시간입니다. |
- 게시글 상세 조회 시
post.id
와 AiImage의 post_id, user_id를 조인하여 이미지를 날리는 방식 사용
- 게시글 작성 시 값이 제대로 들어갔는지 유효성 검사 필요
- 설명: 서비스에 쓰이는 이미지를 관리하는 테이블입니다.(AI 생성, 게시글)
- 기능적 역할
- 한 명의 사용자는 여러 AI 이미지를 생성할 수 있어 User 테이블과 연결됨 (
1 : N
)
- 한 개의 게시글은 여러 이미지를 포함할 수 있어 Post 테이블과 연결됨 (
1 : 1
)
- 한 개의 이미지는 여러 추천 아이템을 포함할 수 있어 DeskProduct 테이블과 연결됨 (
1 : N
)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
좋아요 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
사용자 식별자 |
user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
좋아요 종류 |
type |
VARCHAR(30) |
|
Y |
|
|
|
|
좋아요 대상 |
target_id |
BIGINT |
|
Y |
|
|
|
|
활성상태 |
is_active |
BOOLEAN |
|
Y |
TRUE |
|
|
|
작성시간 |
created_at |
TIMESTAMP |
|
Y |
|
|
|
|
항목 |
내용 |
id |
게시글을 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
user_id |
좋아요를 누른 사용자 ID입니다. user.id 참조, ON DELETE CASCADE입니다. |
type |
좋아요의 유형입니다.(POST, COMMENT , REPLY: 게시글, 댓글, 답글) |
target_id |
좋아요 적용 대상의 pk 값입니다. (post_id, comment_id, reply_id) |
is_active |
좋아요 상태입니다. True 또는 False로 토글되며 재사용됩니다. |
created_at |
좋아요가 생성된 시각입니다. |
- 설명: 게시글에 달린 좋아요를 관리하는 테이블입니다.
- 기능적 역할
- 한 명의 사용자는 여러 좋아요를 누를 수 있어 User 테이블과 연결됨 (
1 : N
)
- 한 개의 게시글은 여러 좋아요를 가질 수 있어 Post 테이블과 연결됨 (
1 : N
)
게시글 댓글 테이블 (Comments)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
댓글 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
사용자 식별자 |
user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
게시글 식별자 |
post_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
본문 |
content |
TEXT |
|
Y |
|
|
|
|
작성시간 |
created_at |
TIMESTAMP |
|
Y |
|
|
|
|
수정시간 |
updated_at |
TIMESTAMP |
|
Y |
created_at |
|
|
|
항목 |
내용 |
id |
댓글을 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK )입니다. |
user_id |
댓글 작성자 ID입니다. user.id 참조, ON DELETE CASCADE 입니다. |
post_id |
댓글이 작성된 게시글 ID입니다. post.id 참조, ON DELETE CASCADE 입니다. |
content |
댓글 본문입니다. |
created_at |
댓글 작성 시각입니다. |
updated_at |
댓글 수정 시각입니다. 생성 시 created_at 과 동일하며 수정 시 자동 갱신됩니다. |
- 설명: 댓글을 관리하는 테이블입니다.
- 기능적 역할
- 한 명의 사용자는 여러 댓글을 작성할 수 있어 User 테이블과 연결됨 (
1 : N
)
- 한 개의 게시글은 여러 댓글을 가질 수 있어 Post 테이블과 연결됨 (
1 : N
)
- 한 개의 댓글은 여러 개의 대댓글을 가질 수 있어 Recomment 테이블과 연결됨 (
1 : N
)
- 한 개의 댓글은 여러 알림을 보낼 수 있어 Notification 테이블과 연결됨 (
1 : N
)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
대댓글 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
사용자 식별자 |
user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
댓글 식별자 |
comment_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
본문 |
content |
TEXT |
|
Y |
|
|
|
|
작성시간 |
created_at |
TIMESTAMP |
|
Y |
|
|
|
|
수정시간 |
updated_at |
TIMESTAMP |
|
Y |
created_at |
|
|
|
항목 |
내용 |
id |
대댓글을 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
user_id |
대댓글 작성자 ID입니다. user.id 참조, ON DELETE CASCADE입니다. |
comment_id |
대댓글이 작성된 댓글 ID입니다. post.id 참조, ON DELETE CASCADE입니다. |
content |
대댓글 본문입니다. 최대 500자 까지 작성 가능합니다. |
created_at |
대댓글 작성 시각입니다. |
updated_at |
대댓글 수정 시각입니다. 생성 시 created_at과 동일하며 수정 시 자동 갱신됩니다. |
- 설명: 대댓글을 관리하는 테이블입니다.
- 기능적 역할
- 한 개의 댓글은 여러 개의 대댓글을 가질 수 있어 Recomment 테이블과 연결됨 (
1 : N
)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
스크랩 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
사용자 식별자 |
user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
스크랩 종류 |
type |
VARCHAR(30) |
|
Y |
|
|
|
|
스크랩 대상 |
target_id |
BIGINT |
|
Y |
|
|
|
|
활성상태 |
is_active |
BOOLEAN |
|
Y |
TRUE |
|
|
|
작성시간 |
created_at |
TIMESTAMP |
|
Y |
|
|
|
|
항목 |
내용 |
id |
게시글을 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
user_id |
스크랩을 한 사용자 ID입니다. user.id 참조, ON DELETE CASCADE입니다. |
type |
스크랩의 유형입니다.(POST, PRODUCT , RECOMMEND: 게시글, 상품, 추천 상품) |
target_id |
스크랩 적용 대상의 pk 값입니다. (post_id, service_product_id, desk_setup_id) |
is_active |
스크랩 상태입니다. True 또는 False로 토글되며 재사용됩니다. |
created_at |
스크랩이 생성된 시각입니다. |
- 설명: 사용자가 스크랩한 정보를 관리하는 테이블입니다.
- 기능적 역할
- 한 명의 사용자는 여러 스크랩을 가질 수 있어 User 테이블과 연결됨 (
1 : N
)
- 한 개의 게시글은 여러 스크랩을 가질 수 있어 Post 테이블과 연결됨 (
1 : N
)
- 한 개의 상품은 여러 스크랩을 가질 수 있어 ServiceProduct 테이블과 연결됨 (
1 : N
)
추천 상품 메인 카테고리 테이블 (ProductMainCategories)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
메인 카테고리 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
카테고리명 |
name |
VARCHAR(30) |
|
Y |
|
|
|
|
항목 |
내용 |
id |
추천 상품 메인 카테고리를 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK )입니다. |
name |
추천 데스크 셋업 상품의 대분류 카테고리명입니다. |
- 설명: 상품의 메인 카테고리를 관리하는 테이블입니다.
- 기능적 역할
- 한 개의 메인 카테고리는 여러 서브 카테고리를 가질 수 있어 ProductSubCategory 테이블과 연결됨 (
1 : N
)
추천 상품 서브 카테고리 테이블 (ProductSubCategories)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
서브 카테고리 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
메인 카테고리 식별자 |
main_category_id |
BIGINT |
|
Y |
|
|
Y |
SET NULL(Soft delete) |
카테고리명 |
name |
VARCHAR(30) |
|
Y |
|
|
|
|
항목 |
내용 |
id |
추천 상품 서브 카테고리를 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK )입니다. |
main_category_id |
상위 메인 카테고리 ID입니다. ProductMainCategory.id 를 참조하며, SET NULL 입니다. |
name |
추천 데스크 셋업 상품의 소분류 카테고리명입니다. |
- 설명: 상품의 서브 카테고리를 관리하는 테이블입니다.
- 기능적 역할
- 한 개의 메인 카테고리는 여러 서브 카테고리를 가질 수 있어 ProductMainCategory 테이블과 연결됨 (
1 : N
)
- 한 개의 서브 카테고리는 여러 추천 데스크 상품을 가질 수 있어 DeskProduct 테이블과 연결됨 (
1 : N
)
추천 데스크 셋업 상품 (DeskProducts)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
제품 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
서브 카테고리 식별자 |
sub_category_id |
BIGINT |
|
Y |
|
|
Y |
SET NULL(Soft delete) |
생성 이미지 식별자 |
ai_image_id |
BIGINT |
|
Y |
|
|
Y |
SET NULL(Soft delete) |
상품명 |
name |
VARCHAR(50) |
|
Y |
|
|
|
|
상품 가격 |
price |
INT |
|
Y |
|
|
|
UNSIGNED |
스크랩 수 |
scrap_count |
INT |
|
Y |
0 |
|
|
UNSIGNED |
가중치 |
weight |
DOUBLE |
|
Y |
0.0 |
|
|
UNSIGNED |
판매처 |
purchase_place |
VARCHAR(30) |
|
Y |
|
|
|
|
구매링크 |
purchase_url |
VARCHAR(255) |
|
Y |
|
|
|
|
객체의 중심 좌표 x축 |
center_x |
INT |
|
Y |
|
|
|
UNSIGNED |
객체의 중심 좌표 y축 |
center_y |
INT |
|
Y |
|
|
|
UNSIGNED |
상품 이미지 |
image_path |
VARCHAR(255) |
|
Y |
|
|
|
|
항목 |
내용 |
id |
추천 데스크 셋업 상품을 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
sub_category_id |
서브 카테고리 ID입니다. ProductSubCategory.id를 참조하며 SET NULL입니다. |
ai_image_id |
관련된 AI 이미지 ID입니다. Image.id를 참조하며 SET NULL입니다. |
name |
추천 데스크 셋업 상품의 상품명입니다. |
price |
추천 데스크 셋업 상품의 가격입니다. |
scrap_count |
추천 데스크 셋업 상품의 스크랩 수입니다. |
weight |
추천 데스크 셋업 상품의 종합적인 노출 우선순위를 판단하기 위한 가중치 값입니다. 좋아요 수, 조회수, 스크랩 수 등 사용자 반응 요소를 기준으로 계산됩니다. 가중 합산 방식으로 주기적으로 업데이트되며, DOUBLE 타입을 사용합니다. |
purchase_place |
추천 데스크 셋업 상품의 판매처입니다.(Ex. 네이버, 쿠팡 등) |
purchase_url |
추천 데스크 셋업 상품의 판매 사이트입니다. |
center_x |
추천 데스크 셋업 상품의 이미지 내의 객체 x좌표입니다. |
center_y |
추천 데스크 셋업 상품의 이미지 내의 객체 y좌표입니다. |
image_path |
추천 데스크 셋업 상품의 이미지 경로입니다. |
- 설명: AI가 추천한 데스크 셋업 상품을 관리하는 테이블입니다.
- 기능적 역할
- 한 개의 서브 카테고리는 여러 추천 데스크 상품을 가질 수 있어 ProductSubCategory 테이블과 연결됨 (
1 : N
)
- 한 개의 생성 이미지는 여러 추천 데스크 상품을 가질 수 있어 Image 테이블과 연결됨 (
1 : N
)
- 이용
- 추후에 생성된 빈도가 높은 데스크 셋업 상품을 구매해서 상품 판매에 이용가능합니다.
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
알림 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
수신 사용자 식별자 |
receiver_user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
송신 사용자 식별자 |
sender_user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
게시글 식별자 |
post_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
댓글 식별자 |
comment_id |
BIGINT |
|
|
NULL |
|
Y |
ON DELETE CASCADE |
알림 유형 |
type |
VARCHAR(30) |
|
Y |
|
|
|
|
확인 상태 |
is_read |
BOOLEAN |
|
Y |
FALSE |
|
|
|
삭제 상태 |
is_deleted |
BOOLEAN |
|
Y |
FALSE |
|
|
|
생성일시 |
created_at |
TIMESTAMP |
|
Y |
|
|
|
|
항목 |
내용 |
id |
알림을 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
receiver_user_id |
알림을 받는 사용자 ID입니다. user.id 참조, ON DELETE CASCADE 입니다. |
sender_user_id |
알림을 발생시킨 사용자 ID입니다. user.id 참조, ON DELETE CASCADE 입니다. |
post_id |
알림이 발생한 게시글 ID입니다. post.id 참조, ON DELETE CASCADE 입니다. |
comment_id |
알림이 발생한 댓글 ID입니다. comment.id 참조, ON DELETE CASCADE 입니다. (nullable) |
type |
알림 유형입니다. (COMMENT, RECOMMENT, LIKE, SCRAP : 댓글, 대댓글, 좋아요, 스크랩) |
is_read |
알림 읽음 여부입니다. 기본값은 false 입니다. |
is_deleted |
알림 삭제 상태입니다. 기본값은 false 입니다. |
created_at |
알림 생성 시각입니다. |
- 설명: 알림 정보를 관리하는 테이블입니다.
- 기능적 역할
- 한 명의 사용자는 여러 알림을 받을 수 있어 Notification 테이블과 연결됨 (
1 : N
)
- 한 개의 게시글에서 여러 알림을 보낼 수 있어 Notification 테이블과 연결됨 (
1 : N
)
- 한 개의 댓글은 여러 알림을 보낼 수 있어 Notification 테이블과 연결됨 (
1 : N
)
포인트 내역 테이블 (PointHistories)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
포인트 사용 내역 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
사용자 식별자 |
user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
변화량 |
amount |
INT |
|
Y |
|
|
|
UNSIGNED |
처리 후 포인트 |
balance_after |
INT |
|
Y |
|
|
|
UNSIGNED |
처리 유형 |
type |
VARCHAR(20) |
|
Y |
|
|
|
|
사용/적립 사유 |
description |
VARCHAR(30) |
|
Y |
|
|
|
|
생성일시 |
created_at |
TIMESTAMP |
|
Y |
|
|
|
|
항목 |
내용 |
id |
포인트 내역을 식별하는 고유 번호입니다. BIGINT 타입으로 자동 증가하며 기본 키(PK)입니다. |
user_id |
해당 포인트 내역의 사용자 ID입니다. user.id 참조, ON DELETE CASCADE입니다. |
amount |
포인트 변화량입니다. |
balance_after |
사용/적립 후 포인트입니다. |
type |
포인트 처리 유형입니다. (EARN, USE, REVERT : 적립, 사용, 복원) |
description |
사용/적립 사유입니다. |
created_at |
포인트 내역 생성 시각입니다. |
- 설명: 포인트 적립 내역을 관리하는 테이블입니다.
- 기능적 역할
- 한 명의 사용자는 여러 포인트 적립 내역을 가질 수 있어 User 테이블과 연결됨 (
1 : N
)
이미지 생성 내역 테이블 (ImageGenerationHistories)
컬럼명 |
컬럼ID |
타입 및 길이 |
Domain |
Not Null |
Default |
PK |
FK |
제약 조건 |
이미지 생성 내역 식별자 |
id |
BIGINT |
|
Y |
|
Y |
|
AUTO_INCREMENT |
사용자 식별자 |
user_id |
BIGINT |
|
Y |
|
|
Y |
ON DELETE CASCADE |
이미지 생성 날짜 |
date_key |
DATE |
|
Y |
|
|
|
|
생성 프롬프트 |
prompt_summary |
TEXT |
|
Y |
|
|
|
|
생성시간 |
generated_at |
DATETIME |
|
Y |
|
|
|
|
- 설명: 이미지 생성 내역을 관리하는 테이블입니다.
- 기능적 역할
- 한 명의 사용자는 여러 이미지 생성 내역을 가질 수 있어 User 테이블과 연결됨 (
1 : N
)
복합 인덱스는 1~3개 컬럼까지만 조합하는 게 가장 이상적입니다.
카디널리티 > WHERE > ORDER BY 순으로 우선 배치 고려
-
Posts 테이블: 게시글 조회
- (created_at) - 전체 게시글 조회 (default: 최신순)
- (type, created_at DESC) - 최신순 정렬
- (type, view_count DESC) - 조회순 정렬
- (type, like_count DESC) - 좋아요순 정렬
- (user_id, created_at DESC) - 내 글 보기
-
Scraps 테이블: 스크랩 종류별 조회
- (user_id, created_at DESC) - 전체 스크랩북 조회
- (user_id, type, created_at DESC) - 게시글 또는 상품 스크랩북 조회
-
Comments 테이블
- (post_id, created_at DESC) - 게시글별 최신순 댓글 조회
- (user_id, post_id) - 특정 게시글 중복 댓글 방지
-
Replies 테이블
- (comment_id, created_at DESC) - 댓글별 최신순 대댓글 조회
-
Likes 테이블
- (target_id, user_id) - 특정 타겟(게시글, 댓글, 답글)에 좋아요를 눌렀는지 빠르게 조회
- (user_id, is_active) - 유저가 눌렀던 좋아요 중 활성상태만 찾을 때 (soft-delete)
-
PostImages 테이블
- (post_id, sequence) - 게시글에 첨부된 여러 이미지를 순서대로 정렬해서 보여줄 때
-
DeskProducts 테이블
- (sub_category_id, score DESC) - 특정 서브카테고리 내 상품을 추천순으로 정렬
- (sub_category_id, scrap_count DESC) - 특정 서브카테고리 내 상품을 스크랩순으로 정렬
-
ProductOrders 테이블: 구매내역 조회
- (user_id, ordered_at DESC) - 유저별 구매내역 최신순 조회
-
AIimages 테이블: 개인 데스크 셋업 보기 조회
- (user_id, created_at DESC) - 유저별 데스크 셋업 최신순 조회
-
Notifications 테이블
- (receiver_user_id, created_at DESC) - 알림 목록 최신순 정렬 조회
-
ServiceProducts 테이블
- (is_active, is_discounted) - 현재 판매 중이면서 특가 적용된 상품을 찾을 때
-
PointHistories 테이블: 포인트 내역 조회
- (user_id, created_at DESC)
-
ImageGenerationHistories : 이미지 생성 내역 저장
- (user_id, date_key) - 유저별 하루 생성 이미지 사용 내역 확인