134 lines
9.7 KiB
SQL
134 lines
9.7 KiB
SQL
-- =============================================================
|
||
-- 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;
|