-- 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', 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_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) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OA文档分类表'; -- 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%';