CREATE TABLE users ( no SERIAL PRIMARY KEY, -- 고유 번호 (자동 증가) user_id TEXT NOT NULL UNIQUE, -- 사용자 아이디 email TEXT NOT NULL UNIQUE, -- 이메일 password TEXT NOT NULL, -- 비밀번호 (해시 저장 권장) created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 생성일 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 수정일 ); CREATE EXTENSION IF NOT EXISTS pgcrypto; INSERT INTO users (user_id, email, password) VALUES ('admin', 'dosangyoon@gmail.com', crypt('dsyoon5004!', gen_salt('bf'))); select * from users; CREATE TABLE qna_board ( id SERIAL PRIMARY KEY, -- 게시글 고유 번호 (자동 증가) title TEXT NOT NULL, -- 제목 content TEXT NOT NULL, -- 내용 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 등록일 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 수정일 views INTEGER DEFAULT 0, -- 조회수, 기본값 0 author_id INTEGER NOT NULL, -- 작성자 ID (users.no 참조) CONSTRAINT fk_author FOREIGN KEY (author_id) REFERENCES users(no) ON DELETE CASCADE ); select * from qna_board; CREATE TABLE ai_news_board ( id SERIAL PRIMARY KEY, -- 뉴스 고유 번호 (자동 증가) url TEXT NOT NULL, -- 뉴스 URL created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 등록일 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 수정일 views INTEGER DEFAULT 0, -- 조회수 (기본값 0) author_id INTEGER NOT NULL, -- 작성자 ID (users.no 참조) CONSTRAINT fk_ai_news_author FOREIGN KEY (author_id) REFERENCES users(no) ON DELETE CASCADE ); -- 챗봇(도구) 목록 CREATE TABLE chat_tools ( tool_id TEXT PRIMARY KEY, -- 예: 'chatgpt', 'dev_chatbot' name TEXT NOT NULL, description TEXT, created_at TIMESTAMPTZ DEFAULT NOW() ); INSERT INTO chat_tools (tool_id, name, description) VALUES -- 기본 챗봇 ('chatgpt', 'ChatGPT', '일반 대화 및 모델 선택 기능을 제공합니다.'), -- PDF 벡터검색 개발 챗봇 ('dev_chatbot', '개발자 챗봇', 'PDF 업로드 후 벡터 검색 기반 Q&A 기능을 제공합니다.'), -- 문서 번역 도구 ('doc_translation','문서 번역', 'MS-Word 문서를 업로드하여 한글→영어 번역을 수행합니다.'), -- LIMS Text-to-SQL ('lims_text2sql', 'LIMS Text2SQL', 'LIMS DB에 대한 자연어 질의를 SQL로 변환하여 결과를 제공합니다.'), -- 연구·논문 QA ('research_qa', 'R&D 문헌 QA', '사내 논문·보고서 기반 질의응답 서비스를 제공합니다.'); -- 대화방(히스토리 목록 하나당 1 row) CREATE TABLE chat_rooms ( room_id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id TEXT REFERENCES users(user_id) ON DELETE CASCADE, tool_id TEXT REFERENCES chat_tools(tool_id) ON DELETE CASCADE, title TEXT, -- 방 제목(첫 메시지 요약 등) created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX idx_chat_rooms_user ON chat_rooms(user_id, updated_at DESC); -- 실제 메시지 CREATE TABLE chat_messages ( msg_id BIGSERIAL PRIMARY KEY, room_id UUID REFERENCES chat_rooms(room_id) ON DELETE CASCADE, sender_type VARCHAR(8) NOT NULL, -- 'user' | 'bot' | 'system' content TEXT NOT NULL, content_type VARCHAR(16) DEFAULT 'text', -- 'text' | 'image' 등 metadata JSONB, -- 모델/프롬프트 등 추가 정보 created_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX idx_chat_messages_room ON chat_messages(room_id, created_at ASC);