- database/schema/ 14개 DDL 파일 신규 생성 (운영 DB pg_dump 기반) - database/seed/ 14개 초기 데이터 파일 분리 - database/_deprecated/로 구 init.sql, auth_init.sql 이동 - database/README.md 신규 작성 (DB 아키텍처, 설치 절차) - docs/ 6개 가이드 문서 wing_auth→auth 스키마 구조로 수정 - README.md, CLAUDE.md wing 단일 DB 구조 반영 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
110 lines
4.2 KiB
SQL
110 lines
4.2 KiB
SQL
-- WING-OPS Database Schema: Board & Manual Tables
|
|
-- wing 스키마: board_post, board_attach, manual_file
|
|
-- 주의: board_post.author_id 는 auth.auth_user(user_id) 크로스스키마 FK
|
|
|
|
-- ============================================================
|
|
-- 1. 게시글 (board_post)
|
|
-- ============================================================
|
|
CREATE TABLE wing.board_post (
|
|
post_sn integer NOT NULL,
|
|
category_cd character varying(20) NOT NULL,
|
|
title character varying(200) NOT NULL,
|
|
content text,
|
|
author_id uuid NOT NULL,
|
|
view_cnt integer DEFAULT 0 NOT NULL,
|
|
pinned_yn character(1) DEFAULT 'N'::bpchar NOT NULL,
|
|
use_yn character(1) DEFAULT 'Y'::bpchar NOT NULL,
|
|
reg_dtm timestamp with time zone DEFAULT now() NOT NULL,
|
|
mdfcn_dtm timestamp with time zone,
|
|
CONSTRAINT board_post_pkey PRIMARY KEY (post_sn),
|
|
CONSTRAINT ck_board_category CHECK (
|
|
((category_cd)::text = ANY ((ARRAY['NOTICE'::character varying, 'DATA'::character varying, 'QNA'::character varying, 'MANUAL'::character varying])::text[]))
|
|
),
|
|
CONSTRAINT ck_board_pinned CHECK ((pinned_yn = ANY (ARRAY['Y'::bpchar, 'N'::bpchar]))),
|
|
CONSTRAINT ck_board_use CHECK ((use_yn = ANY (ARRAY['Y'::bpchar, 'N'::bpchar])))
|
|
);
|
|
|
|
CREATE SEQUENCE wing.board_post_post_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.board_post_post_sn_seq OWNED BY wing.board_post.post_sn;
|
|
ALTER TABLE ONLY wing.board_post ALTER COLUMN post_sn SET DEFAULT nextval('wing.board_post_post_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- 2. 첨부파일 (board_attach)
|
|
-- ============================================================
|
|
CREATE TABLE wing.board_attach (
|
|
attach_sn integer NOT NULL,
|
|
post_sn integer NOT NULL,
|
|
file_nm character varying(200) NOT NULL,
|
|
orgnl_nm character varying(200),
|
|
file_path character varying(500),
|
|
file_sz integer,
|
|
file_ext character varying(10),
|
|
sort_ord integer DEFAULT 0,
|
|
reg_dtm timestamp with time zone DEFAULT now(),
|
|
CONSTRAINT board_attach_pkey PRIMARY KEY (attach_sn)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.board_attach_attach_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.board_attach_attach_sn_seq OWNED BY wing.board_attach.attach_sn;
|
|
ALTER TABLE ONLY wing.board_attach ALTER COLUMN attach_sn SET DEFAULT nextval('wing.board_attach_attach_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- 3. 매뉴얼 파일 (manual_file)
|
|
-- ============================================================
|
|
CREATE TABLE wing.manual_file (
|
|
manual_sn integer NOT NULL,
|
|
catg_nm character varying(50),
|
|
title character varying(200) NOT NULL,
|
|
version character varying(20),
|
|
file_tp character varying(20),
|
|
file_sz character varying(20),
|
|
file_path character varying(500),
|
|
author_nm character varying(50),
|
|
dwnld_cnt integer DEFAULT 0,
|
|
use_yn character(1) DEFAULT 'Y'::bpchar,
|
|
reg_dtm timestamp with time zone DEFAULT now(),
|
|
mdfcn_dtm timestamp with time zone DEFAULT now(),
|
|
CONSTRAINT manual_file_pkey PRIMARY KEY (manual_sn)
|
|
);
|
|
|
|
CREATE SEQUENCE wing.manual_file_manual_sn_seq
|
|
AS integer
|
|
START WITH 1
|
|
INCREMENT BY 1
|
|
NO MINVALUE
|
|
NO MAXVALUE
|
|
CACHE 1;
|
|
|
|
ALTER SEQUENCE wing.manual_file_manual_sn_seq OWNED BY wing.manual_file.manual_sn;
|
|
ALTER TABLE ONLY wing.manual_file ALTER COLUMN manual_sn SET DEFAULT nextval('wing.manual_file_manual_sn_seq'::regclass);
|
|
|
|
|
|
-- ============================================================
|
|
-- FK 제약조건
|
|
-- ============================================================
|
|
-- 크로스스키마 FK: board_post.author_id → auth.auth_user(user_id)
|
|
ALTER TABLE ONLY wing.board_post
|
|
ADD CONSTRAINT fk_board_author
|
|
FOREIGN KEY (author_id) REFERENCES auth.auth_user(user_id);
|
|
|
|
-- 동일스키마 FK: board_attach.post_sn → board_post
|
|
ALTER TABLE ONLY wing.board_attach
|
|
ADD CONSTRAINT board_attach_post_sn_fkey
|
|
FOREIGN KEY (post_sn) REFERENCES wing.board_post(post_sn) ON DELETE CASCADE;
|