☰
하루계획
모담영어
문서관리
교육문서관리
검색
admin
로그아웃
글 수정
게시판
모담 하루계획 출시
앱 개발 일반
모담 하루계획 앱 개발 사양
안드앱 개발 아트팩트
애플앱 개발 아트팩트
웹 개발 일반
모담관리 웹 개발 사양
모담영어
JSP & Servlet 프로그래밍
Django
JavaScript
FastAPI
Linux
Apache / nginx
DB (SQLite/MariaDB)
Git 버젼관리
파이썬
눈누 사용법
캔바 사용법
DESIGN.md 사용법
Whisper 메뉴얼
Audio Converter
Open GPT
Claude
Cursor
운영 메모
개발 메모
로그인 정보
결재정보
구글계정(웹계정)
AI 를 활용한 프로그래밍 학습법
7월 23일
증권정보
그날
영어강의자료
저장
취소
공지
첨부보기
📎 첨부파일
modam_core_DB_스펙.pdf
(11.6 KB)
삭제
본문
상단 탭에서 마크다운 ↔ 위지윅(서식 편집) 전환
글자 크기
크기
기본
10pt
11pt
12pt
14pt
16pt
18pt
20pt
24pt
28pt
36pt
적용
줄간격
배
적용
<div class="doc-fmt" style="font-size:12pt;line-height:1.5"></div> # 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`).
태그
파일 첨부
저장
취소
down