130 lines
8.4 KiB
SQL
130 lines
8.4 KiB
SQL
-- OA 文档管理(文档库 / 文档图谱)建表脚本
|
||
--
|
||
-- 说明:正常情况【不需要执行本脚本】。
|
||
-- 服务在首次访问 /backend/oa/document/* 接口时,会由
|
||
-- controllers/backend_oa_document.go 的 Prepare() 调用
|
||
-- models.EnsureOaDocumentTables() 自动建表(CREATE TABLE IF NOT EXISTS,
|
||
-- sync.Once 保证单进程只建一次)。
|
||
--
|
||
-- 本脚本仅用于以下场景手工预建:
|
||
-- 1. 生产库账号没有 DDL 权限,自动建表失败;
|
||
-- 2. DBA 要求先在预发/生产环境审核建表语句;
|
||
-- 3. 需要排查表结构是否符合预期。
|
||
--
|
||
-- 幂等:全部使用 IF NOT EXISTS,可反复执行,不会覆盖已有数据。
|
||
-- 与代码保持一致:models/oa_document.go
|
||
|
||
-- 1. 文档分类表(树形)
|
||
CREATE TABLE IF NOT EXISTS yz_backend_oa_doc_category (
|
||
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
tid int NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||
user_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '分类归属用户:共享空间共享=0(租户级);私密空间=创建者的 yz_system_tenant_user.uid',
|
||
parent_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '父级ID,0为一级分类',
|
||
name varchar(128) NOT NULL DEFAULT '' COMMENT '分类名称',
|
||
sort int NOT NULL DEFAULT 0 COMMENT '排序,越小越靠前',
|
||
remark varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
|
||
is_system tinyint NOT NULL DEFAULT 0 COMMENT '是否系统内置分类 0-否(可删除) 1-是(不可删除)',
|
||
scope varchar(16) NOT NULL DEFAULT 'shared' COMMENT '所属空间 shared-共享文档空间 personal-私密文档空间(绑定用户级别)',
|
||
is_deleted tinyint NOT NULL DEFAULT 0 COMMENT '是否删除 0-否 1-是',
|
||
create_time datetime DEFAULT NULL COMMENT '创建时间',
|
||
update_time datetime DEFAULT NULL COMMENT '更新时间',
|
||
delete_time datetime DEFAULT NULL COMMENT '删除时间',
|
||
PRIMARY KEY (id),
|
||
KEY idx_tid_parent (tid, parent_id),
|
||
KEY idx_tid_scope_user (tid, scope, user_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OA文档分类表';
|
||
|
||
-- 1.1 历史库补齐列(特性上线前已建表时执行,已存在则报错可忽略)
|
||
-- ALTER TABLE yz_backend_oa_doc_category
|
||
-- ADD COLUMN is_system tinyint NOT NULL DEFAULT 0 COMMENT '是否系统内置分类 0-否(可删除) 1-是(不可删除)';
|
||
-- ALTER TABLE yz_backend_oa_doc_category
|
||
-- ADD COLUMN scope varchar(16) NOT NULL DEFAULT 'shared' COMMENT '所属空间 shared-共享 personal-私密';
|
||
-- ALTER TABLE yz_backend_oa_doc_category
|
||
-- ADD COLUMN user_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '分类归属用户(私密空间=租户用户 uid)';
|
||
|
||
-- 1.2 分类归属规则(双空间模型,2026-09 起):
|
||
-- 文档库按「共享文档 / 私密文档」两个空间组织,每个空间各自一棵分类树:
|
||
-- - 共享空间:scope=shared、user_id=0(租户级,全租户共用一套,任何人可建/删,内置分类除外);
|
||
-- - 私密空间:scope=personal、user_id=当前用户的 yz_system_tenant_user.uid(绑定到用户级别,各用户独立一套)。
|
||
-- 文档可见性(OaDoc.visibility)与所在空间一一对应:共享空间→0(租户公开),私密空间→1(私密,仅创建者与被共享者可见)。
|
||
-- 系统内置分类「项目文档」(scope=shared, user_id=0, is_system=1) 属于共享空间,按租户自动补建
|
||
-- (models.EnsureOaDocDefaultCategories),一般无需手工插入。
|
||
-- 历史脏数据(scope 不在 shared/personal)在 EnsureOaDocumentTables 中自动归为共享空间(user_id=0, scope=shared)。
|
||
-- 说明:「未分类」是虚拟分类,文档 category_id = 0 即表示未分类,两个空间各自独立计算,不落库、不可删除。
|
||
|
||
-- 2. 文档表
|
||
-- doc_type: 0-其他 1-文档 2-表格 3-演示 4-PDF 5-图片 6-压缩包 7-视频 8-音频
|
||
-- status : 0-草稿 1-已发布 2-已归档
|
||
CREATE TABLE IF NOT EXISTS yz_backend_oa_doc (
|
||
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
tid int NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||
category_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '所属分类ID,0为未分类',
|
||
title varchar(255) NOT NULL DEFAULT '' COMMENT '文档标题',
|
||
file_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '关联附件ID(yz_system_files)',
|
||
file_url varchar(512) NOT NULL DEFAULT '' COMMENT '附件访问地址',
|
||
file_name varchar(255) NOT NULL DEFAULT '' COMMENT '原始文件名',
|
||
ext varchar(16) NOT NULL DEFAULT '' COMMENT '扩展名',
|
||
size bigint unsigned NOT NULL DEFAULT 0 COMMENT '文件大小(字节)',
|
||
doc_type tinyint NOT NULL DEFAULT 0 COMMENT '类型 0-其他 1-文档 2-表格 3-演示 4-PDF 5-图片 6-压缩包 7-视频 8-音频',
|
||
tags varchar(255) NOT NULL DEFAULT '' COMMENT '标签,逗号分隔',
|
||
summary varchar(1000) NOT NULL DEFAULT '' COMMENT '摘要/描述',
|
||
status tinyint NOT NULL DEFAULT 0 COMMENT '状态 0-草稿 1-已发布 2-已归档',
|
||
version int NOT NULL DEFAULT 1 COMMENT '版本号',
|
||
is_star tinyint NOT NULL DEFAULT 0 COMMENT '是否收藏 0-否 1-是',
|
||
owner_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '负责人ID',
|
||
owner_name varchar(100) NOT NULL DEFAULT '' COMMENT '负责人姓名',
|
||
view_count int NOT NULL DEFAULT 0 COMMENT '查看次数',
|
||
download_count int NOT NULL DEFAULT 0 COMMENT '下载次数',
|
||
creator_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '创建人ID',
|
||
creator_name varchar(100) NOT NULL DEFAULT '' COMMENT '创建人姓名',
|
||
visibility tinyint NOT NULL DEFAULT 0 COMMENT '可见性 0-租户公开 1-私密(仅创建者与被共享者)',
|
||
is_deleted tinyint NOT NULL DEFAULT 0 COMMENT '是否删除 0-否 1-是',
|
||
create_time datetime DEFAULT NULL COMMENT '创建时间',
|
||
update_time datetime DEFAULT NULL COMMENT '更新时间',
|
||
delete_time datetime DEFAULT NULL COMMENT '删除时间',
|
||
PRIMARY KEY (id),
|
||
KEY idx_tid_cate (tid, category_id, is_deleted),
|
||
KEY idx_tid_status (tid, status, is_deleted),
|
||
KEY idx_tid_title (tid, title)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OA文档表';
|
||
|
||
-- 3. 文档关联表(文档图谱的连线来源)
|
||
-- relation: reference-引用 related-相关 version-版本 belong-从属
|
||
-- 说明:代码在建立关联时会同时写入正向与反向两条记录,便于图谱无向检索;
|
||
-- uk_doc_pair 保证同一对文档的同一关系不重复。
|
||
CREATE TABLE IF NOT EXISTS yz_backend_oa_doc_link (
|
||
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
tid int NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||
source_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '源文档ID',
|
||
target_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '目标文档ID',
|
||
relation varchar(32) NOT NULL DEFAULT 'related' COMMENT '关系 reference-引用 related-相关 version-版本 belong-从属',
|
||
remark varchar(255) NOT NULL DEFAULT '' COMMENT '关系说明',
|
||
creator_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '创建人ID',
|
||
create_time datetime DEFAULT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_doc_pair (tid, source_id, target_id, relation),
|
||
KEY idx_tid_source (tid, source_id),
|
||
KEY idx_tid_target (tid, target_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OA文档关联表';
|
||
|
||
-- 4. 文档共享表(私密文档可见性授权)
|
||
-- share_type: 0-用户(target_id=uid) 1-部门(target_id=org_id,含子部门)
|
||
-- uk_doc_target 保证同一文档对同一目标不重复授权。
|
||
CREATE TABLE IF NOT EXISTS yz_backend_oa_doc_share (
|
||
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
tid int NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||
doc_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '文档ID',
|
||
share_type tinyint NOT NULL DEFAULT 0 COMMENT '共享类型 0-用户(target_id=uid) 1-部门(target_id=org_id,含子部门)',
|
||
target_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '共享目标ID',
|
||
creator_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '授权人ID',
|
||
create_time datetime DEFAULT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_doc_target (tid, doc_id, share_type, target_id),
|
||
KEY idx_tid_doc (tid, doc_id),
|
||
KEY idx_target (tid, share_type, target_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OA文档共享表';
|
||
|
||
-- 5. 校验(应看到 4 张表)
|
||
-- SHOW TABLES LIKE 'yz_backend_oa_doc%';
|
||
|