Files
yunzerwebsiteallinone/go/docs/sql/create_oa_document.sql
T
2026-09-15 10:44:31 +08:00

134 lines
9.7 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================
-- OA文档库相关表:分类表 / 文档表 / 关联表 / 共享表
-- yz_backend_oa_doc_category 文档分类(含共享/私密双空间)
-- yz_backend_oa_doc 文档
-- yz_backend_oa_doc_link 文档关联(图谱)
-- yz_backend_oa_doc_share 文档共享(用户/部门)
-- 说明:建表可重复执行;末尾的历史库补列与数据修正在重复执行时
-- 报 "Duplicate column name" 属正常,跳过即可。
-- 运行:mysql -h<host> -P<port> -u<user> -p <db> < create_oa_document.sql
-- =============================================================
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 '归属用户ID 0-租户级(共享分类) >0-该用户的个人分类',
`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 '所属范围 personal-个人文档 shared-共享文档',
`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文档分类表';
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 '摘要/描述',
`content` longtext NULL COMMENT '在线制作文档的编辑源(富文本HTML),仅用于再次编辑',
`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文档表';
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文档关联表';
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文档共享表';
-- -------------------------------------------------------------
-- 历史库补齐列(表已存在且缺列时才执行 ALTER,可重复执行不报错)
-- -------------------------------------------------------------
-- yz_backend_oa_doc.visibility
SET @tbl := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_doc');
SET @col := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_doc' AND COLUMN_NAME = 'visibility');
SET @ddl := IF(@tbl > 0 AND @col = 0, 'ALTER TABLE `yz_backend_oa_doc` ADD COLUMN `visibility` tinyint NOT NULL DEFAULT 0 COMMENT ''可见性 0-租户公开 1-私密(仅创建者与被共享者)''', 'DO 0');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- yz_backend_oa_doc.content
SET @tbl := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_doc');
SET @col := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_doc' AND COLUMN_NAME = 'content');
SET @ddl := IF(@tbl > 0 AND @col = 0, 'ALTER TABLE `yz_backend_oa_doc` ADD COLUMN `content` longtext NULL COMMENT ''在线制作文档的编辑源(富文本HTML),仅用于再次编辑''', 'DO 0');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- yz_backend_oa_doc_category.is_system
SET @tbl := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_doc_category');
SET @col := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_doc_category' AND COLUMN_NAME = 'is_system');
SET @ddl := IF(@tbl > 0 AND @col = 0, 'ALTER TABLE `yz_backend_oa_doc_category` ADD COLUMN `is_system` tinyint NOT NULL DEFAULT 0 COMMENT ''是否系统内置分类 0-否(可删除) 1-是(不可删除)''', 'DO 0');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- yz_backend_oa_doc_category.scope
SET @tbl := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_doc_category');
SET @col := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_doc_category' AND COLUMN_NAME = 'scope');
SET @ddl := IF(@tbl > 0 AND @col = 0, 'ALTER TABLE `yz_backend_oa_doc_category` ADD COLUMN `scope` varchar(16) NOT NULL DEFAULT ''shared'' COMMENT ''所属范围 personal-个人文档 shared-共享文档''', 'DO 0');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- yz_backend_oa_doc_category.user_id
SET @tbl := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_doc_category');
SET @col := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_oa_doc_category' AND COLUMN_NAME = 'user_id');
SET @ddl := IF(@tbl > 0 AND @col = 0, 'ALTER TABLE `yz_backend_oa_doc_category` ADD COLUMN `user_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT ''归属用户ID 0-租户级(共享分类) >0-该用户的个人分类''', 'DO 0');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 双空间模型:兼容存量数据,将不在 (shared, personal) 范围内的分类统一归为共享空间
-- (user_id 置 0、scope 置 shared),避免历史脏数据导致分类不可见。
-- 注意:不再把 personal 并入 shared,私密空间需保留各自的 user_id 隔离。
UPDATE `yz_backend_oa_doc_category`
SET `user_id` = 0, `scope` = 'shared'
WHERE `scope` NOT IN ('shared', 'personal') AND `is_deleted` = 0;