모담테크
admin

문서관리(DEV_ModamCore) 테이블 상세 정보 (첨부파일)

admin 2026-08-10 09:05 조회 12 좋아요 0
수정
목록

modam_core DB 테이블 스펙

  • DB: MariaDB · InnoDB · utf8mb4
  • 업무 데이터 7개 테이블 — 문서관리(app_doc) 6 + 일정관리(app_schedule) 1
  • ※ Django 인증/세션(auth_user 등)은 별도 SQLite. 이 문서는 modam_core 의 업무 테이블만 다룬다.
  • 기준: 서버 modam_core 실제 스키마(information_schema)

문서관리 (app_doc)

tb_board — 게시판 / 그룹 트리 (네비게이션)

컬럼 타입 Null 키 기본값 설명
board_id int NO PK auto_inc 게시판/그룹 고유번호
parent_id int YES 상위 그룹 board_id (NULL = 최상위)
name varchar(200) NO 게시판/그룹 이름
sort_order int NO 0 같은 레벨에서의 정렬 순서
is_group tinyint NO 0 1 = 글이 없는 그룹 헤더
is_favorite tinyint NO 0 즐겨찾기(★) 표시
created_at datetime NO now() 생성 일시

설명 — 좌측 게시판 네비게이션의 2단 트리. is_group=1 인 그룹 아래에 하위 게시판이 parent_id 로 묶이고, 같은 레벨은 sort_order 로 정렬한다. 글이 있는 게시판/하위가 있는 그룹은 삭제 불가.

tb_doc — 문서 (글)

컬럼 타입 Null 키 기본값 설명
doc_id int NO PK auto_inc 문서 고유번호
board_id int NO idx 소속 게시판 (ix_doc_board)
title varchar(300) NO 제목
content_md longtext NO 마크다운 원문
content_html longtext NO bleach 정제된 렌더 HTML
user_id varchar(150) YES idx 작성자 로그인 아이디(=auth_user.username)
is_notice tinyint NO 0 1 = 공지(목록 상단 고정)
view_count int NO 0 조회수
like_count int NO 0 좋아요 수
status varchar(1) NO idx 'N' 'N'=정상 / 'D'=소프트 삭제
created_at datetime NO now() 작성 일시
updated_at datetime NO now() 수정 일시

설명 — 문서 본문. 마크다운 원문(content_md)과 렌더 HTML(content_html)을 함께 저장한다. 작성자는 숫자 FK가 아니라 로그인 아이디(username) 문자열로 저장(auth_user 는 SQLite 에 있어 크로스-DB 조인 회피). 삭제는 status='D' 소프트 삭제이며 기본 조회는 status!='D' 를 포함. 인덱스: ix_doc_board(board_id,status), ix_doc_status(status), ix_doc_user(user_id).

tb_tag — 태그 사전

컬럼 타입 Null 키 기본값 설명
tag_id int NO PK auto_inc 태그 고유번호
name varchar(100) NO UNIQUE 태그명 (중복 불가)

설명 — 문서에 붙이는 태그의 마스터. 이름은 UNIQUE 로 중복을 막고, 실제 문서 연결은 tb_doc_tag 로 한다.

tb_doc_tag — 문서 ↔ 태그 연결 (다대다)

컬럼 타입 Null 키 기본값 설명
doc_id int NO PK 문서 번호 (복합 PK)
tag_id int NO PK 태그 번호 (복합 PK)

설명 — 문서와 태그의 N:M 매핑 테이블. (doc_id, tag_id) 복합 기본키로 같은 쌍의 중복을 방지한다.

tb_file — 첨부파일 메타

컬럼 타입 Null 키 기본값 설명
file_id int NO PK auto_inc 파일 고유번호
doc_id int NO idx 소속 문서 (ix_file_doc)
orig_name varchar(255) NO 업로드 원본 파일명
stored_name varchar(255) NO 서버 저장 파일명
size int NO 0 파일 크기(바이트)
uploaded_at datetime NO now() 업로드 일시

설명 — 문서 첨부파일의 메타데이터. 실제 파일 바이너리는 DB 가 아니라 media/attachments/<stored_name> 에 저장하고, 다운로드 시 orig_name 으로 내려준다.

tb_comment — 댓글 (스키마만, 현재 UI 미사용)

컬럼 타입 Null 키 기본값 설명
comment_id int NO PK auto_inc 댓글 고유번호
doc_id int NO idx 소속 문서 (ix_comment_doc)
user_id varchar(150) YES idx 작성자 로그인 아이디 (ix_comment_user)
content text NO 댓글 내용
status varchar(1) NO 'N' 'N'=정상 / 'D'=소프트 삭제
created_at datetime NO now() 작성 일시

설명 — 문서 댓글용 테이블. 스키마는 정의돼 있으나 현재 화면에서는 아직 쓰지 않는다(검색의 댓글 범위 등 향후 확장 대비). 작성자·소프트삭제 규칙은 tb_doc 과 동일.


일정관리 (app_schedule)

tb_todo — 할 일 / 일정 (통합)

컬럼 타입 Null 키 기본값 설명
todo_id int NO PK auto_inc 고유번호
content text NO 내용(제목)
is_done tinyint NO 0 완료(비반복 할 일)
is_star tinyint NO 0 별표(즐겨찾기)
is_my_day tinyint NO idx 0 '나의 하루' 여부 (ix_todo_myday)
my_day_date varchar(10) YES 나의 하루로 지정한 날짜(YYYY-MM-DD)
due_date varchar(10) YES idx 기한(YYYY-MM-DD 문자열, ix_todo_due)
remind_time varchar(30) YES 미리 알림 시각(HH:MM, 24h)
repeat_unit varchar(10) YES 반복 단위 day/week/month/year (NULL=안 함)
repeat_interval int NO 1 반복 간격(N 단위마다)
note text YES 메모
on_calendar tinyint NO 0 1 = 달력에 일정으로 표시
is_todo tinyint NO 1 1 = 할 일 목록 노출 (일정만 등록 시 0)
created_at datetime NO now() 생성 일시
last_done_date varchar(10) YES 반복 할 일의 현재 회차 완료일(회차별 완료 판정)
remind_day varchar(10) YES 미리 알림 기준일 prev(전일)/same(당일)

설명 — 일정관리의 유일한 테이블. 할 일과 일정을 분리하지 않고 플래그로 구분한다: is_todo(할 일 목록 노출) / on_calendar(달력 일정 표시) — 둘 다 1이면 동시, '일정만'은 is_todo=0. 반복은 발생일을 저장하지 않고 repeat_unit·repeat_interval 로 계산(mdl_recur)하며, 반복의 회차별 완료는 last_done_date 하나로 처리(그 회차 발생일보다 이르면 미완료). 날짜류(due_date·my_day_date·last_done_date)와 remind_time 은 문자열 비교(사전식=날짜순) 편의를 위해 VARCHAR 로 둔다.


공통 규칙 / 메모

  • 삭제 = 소프트 삭제(tb_doc.status='D'), 기본 조회는 status != 'D' 를 포함.
  • 작성자(user_id) 는 숫자 FK가 아니라 로그인 아이디(username) 문자열(mdmproj1 관례) — auth_user 가 SQLite 에 있어 크로스-DB 조인을 피함.
  • 날짜/시각 일부 컬럼(due_date·my_day_date·last_done_date·remind_time)은 문자열(VARCHAR) — 문자열 비교가 곧 날짜순이라 편의상 사용.
  • 스키마 추가는 init_schema 의 ALTER TABLE ... ADD COLUMN IF NOT EXISTS ...(idempotent)로 관리(예: last_done_date, remind_day).
수정
목록