| 테이블명 | 설명 |
|---|---|
| Users | 사용자 기본 정보 및 계정 상태 관리 |
| Platforms | 매물 출처 플랫폼(번개장터, 중고나라 등) 관리 |
| Items | 크롤링된 전체 중고 매물 정보 및 현재/최저가 관리 |
| Price_History | 상품별 가격 변동 이력 저장 (시세 그래프용) |
| Wishlists | 사용자별 찜 목록 및 목표 가격 알림 설정 |
| Search_Logs | 사용자 검색 키워드 및 클릭 로그 (최근 검색어용) |
| Search_Rankings | 집계된 실시간 인기 검색어 순위 |
| User_Preferences | 사용자 활동 분석 기반 선호 태그 (맞춤 추천용) |
| Banners | 홈화면 배너 이미지 및 링크 관리 |
| Chat_History | 사용자와 챗봇 간의 대화 내역 저장 |
| Chat_FAQ | 챗봇 자동 응대를 위한 질문-답변 지식베이스 |
| Recommended_Items | 추천 상품 연결 테이블 |
Users 테이블
| 테이블명 | 컬럼명 | 타입 | 제약조건 | Null허용 | 내용 |
|---|---|---|---|---|---|
| Users | user_id | NUMBER | PK | No | 사용자 고유 번호 (모든 활동의 기준) |
| VARCHAR2(100) | Unique | No | 로그인 아이디 및 가격 알림 수신용 이메일 | ||
| password | VARCHAR2(255) | - | No | 암호화된 비밀번호 (SHA-256 권장) | |
| nickname | VARCHAR2(50) | - | No | 서비스 내에서 사용될 별칭 | |
| account_status | VARCHAR2(20) | - | Yes | ACTIVE(정상), DELETED(탈퇴) 등 계정 상태 |
Platforms 테이블
| 테이블명 | 컬럼명 | 타입 | 제약조건 | Null허용 | 내용 |
|---|---|---|---|---|---|
| Platforms | platform_id | NUMBER | PK | No | 플랫폼 구분 코드 (1:번개장터, 2:중고나라 등) |
| platform_name | VARCHAR2(50) | - | No | 플랫폼 한글 명칭 |
Items 테이블
| 테이블명 | 컬럼명 | 타입 | 제약조건 | Null허용 | 내용 |
|---|---|---|---|---|---|
| Items | item_id | NUMBER | PK | No | 시스템 고유 상품 번호 |
| platform_id | NUMBER | FK | No | 상품 출처 플랫폼 ID (Platforms 참조) | |
| original_id | VARCHAR2(100) | Unique | No | 원본 사이트의 게시글 고유 ID (중복 수집 방지용) | |
| title | VARCHAR2(300) | - | No | 매물 제목 (검색 및 카테고리 추출 대상) | |
| current_price | NUMBER | - | No | 수집된 시점의 현재 판매가 | |
| lowest_price | NUMBER | - | Yes | 수집 이래 기록된 역대 최저가 (알림 트리거) | |
| category_name | VARCHAR2(100) | - | Yes | 키워드 분석으로 할당된 카테고리 명 | |
| item_url | VARCHAR2(500) | - | No | 원본 상품 상세 페이지 링크 |
Price_History 테이블
| 테이블명 | 컬럼명 | 타입 | 제약조건 | Null허용 | 내용 |
|---|---|---|---|---|---|
| Price_History | history_id | NUMBER | PK | No | 시세 기록 고유 번호 |
| item_id | NUMBER | FK | No | 대상 상품 번호 (Items 참조) | |
| price | NUMBER | - | No | 기록 시점의 가격 | |
| recorded_at | DATE | - | No | 가격이 기록된 날짜 (시세 그래프 X축용) |
Wishlists 테이블
| 테이블명 | 컬럼명 | 타입 | 제약조건 | Null허용 | 내용 |
|---|---|---|---|---|---|
| Wishlists | wish_id | NUMBER | PK | No | 찜하기 고유 번호 |
| user_id | NUMBER | FK | No | 찜한 사용자 번호 (Users 참조) | |
| item_id | NUMBER | FK | No | 찜한 상품 번호 (Items 참조) | |
| target_price | NUMBER | - | Yes | 사용자가 설정한 희망 알림가 | |
| is_lowest_alert | CHAR(1) | - | Yes | 최저가 갱신 시 알림 수신 여부 (Y/N)z |
Search_Logs 테이블
| 테이블명 | 컬럼명 | 타입 | 제약조건 | Null허용 | 내용 |
|---|---|---|---|---|---|
| Search_Logs | log_id | NUMBER | PK | No | 검색 로그 고유 번호 |
| user_id | NUMBER | FK | Yes | 검색한 사용자 (비로그인 시 NULL) | |
| keyword | VARCHAR2(100) | - | No | 입력한 검색 키워드 (최근 검색어용) | |
| clicked_item_id | NUMBER | FK | Yes | 검색 결과 중 클릭한 상품 (Items 참조) |
Search_Rankings
| 테이블명 | 컬럼명 | 타입 | 제약조건 | Null허용 | 내용 |
|---|---|---|---|---|---|
| Search_Rankings | rank_id | NUMBER | PK | No | 순위 데이터 고유 번호 |
| keyword | VARCHAR2(100) | - | No | 인기 검색 키워드 | |
| search_count | NUMBER | - | No | 누적 검색 횟수 | |
| trend_status | VARCHAR2(10) | - | Yes | 순위 변동 상태 (UP, DOWN, STAY) |
User_Preferences 테이블
| 테이블명 | 컬럼명 | 타입 | 제약조건 | Null허용 | 내용 |
|---|---|---|---|---|---|
| User_Preferences | pref_id | NUMBER | PK | No | 선호도 데이터 고유 번호 |
| user_id | NUMBER | FK | No | 대상 사용자 (Users 참조) | |
| preferred_tag | VARCHAR2(50) | - | No | 분석된 선호 카테고리/태그 (맞춤 추천용) |
Banners 테이블
| 테이블명 | 컬럼명 | 타입 | 제약조건 | Null허용 | 내용 |
|---|---|---|---|---|---|
| Banners | banner_id | NUMBER | PK | No | 배너 고유 번호 |
| image_url | VARCHAR2(500) | - | No | 배너 이미지 경로 | |
| link_url | VARCHAR2(500) | - | Yes | 클릭 시 이동할 링크 | |
| display_order | NUMBER | - | Yes | 홈화면 노출 순서 |
Chat_History 테이블
| 테이블명 | 컬럼명 | 타입 | 제약조건 | Null허용 | 내용 |
|---|---|---|---|---|---|
| Chat_History | chat_id | NUMBER | PK | No | 대화 기록 고유 번호 |
| user_id | NUMBER | FK | No | 질문한 사용자 (Users 참조) | |
| user_message | CLOB | - | No | 사용자 질문 내용 | |
| bot_response | CLOB | - | No | 챗봇 답변 내용 |
Chat_FAQ 테이블
Recommended_Items테이블

-- [1. 사용자 및 보안 관리]
CREATE TABLE Users (
user_id NUMBER PRIMARY KEY,
email VARCHAR2(100) UNIQUE NOT NULL,
password VARCHAR2(255) NOT NULL,
nickname VARCHAR2(50) NOT NULL,
account_status VARCHAR2(20) DEFAULT 'ACTIVE',
created_at TIMESTAMP DEFAULT SYSDATE
);
-- [2. 플랫폼 및 매물 정보]
CREATE TABLE Platforms (
platform_id NUMBER PRIMARY KEY,
platform_name VARCHAR2(50) NOT NULL
);
CREATE TABLE Items (
item_id NUMBER PRIMARY KEY,
platform_id NUMBER,
original_id VARCHAR2(100) NOT NULL,
title VARCHAR2(300) NOT NULL,
current_price NUMBER NOT NULL,
lowest_price NUMBER, -- 역대 최저가 저장용
category_name VARCHAR2(100), -- 카테고리 분류용
thumbnail_url VARCHAR2(500),
item_url VARCHAR2(500) NOT NULL,
crawled_at TIMESTAMP DEFAULT SYSDATE,
CONSTRAINT fk_items_platform FOREIGN KEY (platform_id) REFERENCES Platforms(platform_id)
);
-- [3. 시세 그래프 및 알림용 이력]
CREATE TABLE Price_History (
history_id NUMBER PRIMARY KEY,
item_id NUMBER,
price NUMBER NOT NULL,
recorded_at DATE DEFAULT SYSDATE, -- 일별 시세 추적용
CONSTRAINT fk_price_history_item FOREIGN KEY (item_id) REFERENCES Items(item_id)
);
-- [4. 개인 페이지 및 알림 (U02~U05)]
CREATE TABLE Wishlists (
wish_id NUMBER PRIMARY KEY,
user_id NUMBER,
item_id NUMBER,
target_price NUMBER, -- 사용자 설정 희망 알림가
is_lowest_alert CHAR(1) DEFAULT 'Y',
added_at TIMESTAMP DEFAULT SYSDATE,
CONSTRAINT fk_wish_user FOREIGN KEY (user_id) REFERENCES Users(user_id),
CONSTRAINT fk_wish_item FOREIGN KEY (item_id) REFERENCES Items(item_id)
);
-- [5. 홈화면: 검색 로그 및 맞춤 추천]
CREATE TABLE Search_Logs (
log_id NUMBER PRIMARY KEY,
user_id NUMBER,
keyword VARCHAR2(100) NOT NULL, -- 최근 검색 및 검색 순위 원천 데이터
clicked_item_id NUMBER,
created_at TIMESTAMP DEFAULT SYSDATE,
CONSTRAINT fk_logs_user FOREIGN KEY (user_id) REFERENCES Users(user_id),
CONSTRAINT fk_logs_item FOREIGN KEY (clicked_item_id) REFERENCES Items(item_id)
);
-- [6. 홈화면: 실시간 검색 순위 집계 (Batch 결과 저장용)]
CREATE TABLE Search_Rankings (
rank_id NUMBER PRIMARY KEY,
keyword VARCHAR2(100) NOT NULL,
search_count NUMBER DEFAULT 0,
trend_status VARCHAR2(10) -- 상승, 하락, 유지
);
-- [7. 홈화면: 사용자 맞춤 추천 태그]
CREATE TABLE User_Preferences (
pref_id NUMBER PRIMARY KEY,
user_id NUMBER,
preferred_tag VARCHAR2(50), -- 자주 찾는 카테고리/태그 저장
CONSTRAINT fk_pref_user FOREIGN KEY (user_id) REFERENCES Users(user_id)
);
-- [8. 홈화면: 배너 관리]
CREATE TABLE Banners (
banner_id NUMBER PRIMARY KEY,
image_url VARCHAR2(500) NOT NULL,
link_url VARCHAR2(500),
display_order NUMBER,
is_active CHAR(1) DEFAULT 'Y'
);
-- [9. 챗봇: 대화 내역]
CREATE TABLE Chat_History (
chat_id NUMBER PRIMARY KEY,
user_id NUMBER,
user_message CLOB,
bot_response CLOB,
created_at TIMESTAMP DEFAULT SYSDATE,
CONSTRAINT fk_chat_user FOREIGN KEY (user_id) REFERENCES Users(user_id)
);
-- [10. 챗봇: 자주 묻는 질문 답변셋]
CREATE TABLE Chat_FAQ (
faq_id NUMBER PRIMARY KEY,
question_pattern VARCHAR2(200),
answer_text CLOB
);
-- [12. 맞춤 추천 상품 연결 테이블]
CREATE TABLE Recommended_Items (
recommend_id NUMBER PRIMARY KEY,
user_id NUMBER NOT NULL, -- 필수: 대상 유저가 있어야 함
item_id NUMBER NOT NULL, -- 필수: 추천할 상품이 있어야 함
score NUMBER, -- 선택: 점수는 없을 수 있음
recommend_type VARCHAR2(50), -- 선택: 사유는 생략 가능
created_at TIMESTAMP DEFAULT SYSDATE NOT NULL,
CONSTRAINT fk_rec_user FOREIGN KEY (user_id) REFERENCES Users(user_id),
CONSTRAINT fk_rec_item FOREIGN KEY (item_id) REFERENCES Items(item_id)
);