schema.sql 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. -- ============================================
  2. -- 软件项目资源登记平台 - 数据库设计
  3. -- 数据库: MySQL 8.0+
  4. -- 字符集: utf8mb4
  5. -- ============================================
  6. CREATE DATABASE IF NOT EXISTS `resource_platform` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  7. USE `resource_platform`;
  8. -- ============================================
  9. -- 1. 用户表
  10. -- ============================================
  11. DROP TABLE IF EXISTS `sys_user`;
  12. CREATE TABLE `sys_user` (
  13. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  14. `username` VARCHAR(50) NOT NULL COMMENT '登录账号',
  15. `password` VARCHAR(100) NOT NULL COMMENT '密码(加密存储)',
  16. `real_name` VARCHAR(50) NOT NULL COMMENT '姓名',
  17. `email` VARCHAR(100) NOT NULL COMMENT '邮箱,用于到期提醒',
  18. `role` TINYINT NOT NULL DEFAULT 2 COMMENT '角色: 1-管理员 2-普通用户',
  19. `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 1-启用 0-禁用',
  20. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  21. `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  22. PRIMARY KEY (`id`),
  23. UNIQUE KEY `uk_username` (`username`)
  24. ) ENGINE=InnoDB COMMENT='系统用户表';
  25. -- ============================================
  26. -- 2. 资源类型表(可扩展字典)
  27. -- ============================================
  28. DROP TABLE IF EXISTS `resource_type`;
  29. CREATE TABLE `resource_type` (
  30. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  31. `name` VARCHAR(50) NOT NULL COMMENT '类型名称,如:云服务器、云数据库、对象存储、短信套餐、邮件套餐',
  32. `sort` INT NOT NULL DEFAULT 0 COMMENT '排序',
  33. `remark` VARCHAR(255) DEFAULT NULL,
  34. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  35. PRIMARY KEY (`id`),
  36. UNIQUE KEY `uk_name` (`name`)
  37. ) ENGINE=InnoDB COMMENT='资源类型字典表';
  38. -- ============================================
  39. -- 3. 服务商表(可选字典)
  40. -- ============================================
  41. DROP TABLE IF EXISTS `provider`;
  42. CREATE TABLE `provider` (
  43. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  44. `name` VARCHAR(50) NOT NULL COMMENT '服务商名称,如:阿里云、腾讯云、AWS',
  45. `remark` VARCHAR(255) DEFAULT NULL,
  46. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  47. PRIMARY KEY (`id`),
  48. UNIQUE KEY `uk_name` (`name`)
  49. ) ENGINE=InnoDB COMMENT='服务商字典表';
  50. -- ============================================
  51. -- 4. 项目表
  52. -- ============================================
  53. DROP TABLE IF EXISTS `project`;
  54. CREATE TABLE `project` (
  55. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  56. `name` VARCHAR(100) NOT NULL COMMENT '项目名称',
  57. `owner_id` BIGINT UNSIGNED NOT NULL COMMENT '负责人,关联sys_user.id',
  58. `parent_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '父项目ID: 0-顶层(无父),仅支持两层',
  59. `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 1-进行中 0-已下线',
  60. `remark` VARCHAR(500) DEFAULT NULL,
  61. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  62. `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  63. `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除: 0-未删除 1-已删除',
  64. PRIMARY KEY (`id`),
  65. KEY `idx_owner` (`owner_id`)
  66. ) ENGINE=InnoDB COMMENT='项目表';
  67. -- ============================================
  68. -- 5. 资源表(核心表)
  69. -- ============================================
  70. DROP TABLE IF EXISTS `resource`;
  71. CREATE TABLE `resource` (
  72. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  73. `name` VARCHAR(100) NOT NULL COMMENT '资源名称',
  74. `type_id` BIGINT UNSIGNED NOT NULL COMMENT '关联resource_type.id',
  75. `provider_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '关联provider.id',
  76. `account_info` VARCHAR(255) DEFAULT NULL COMMENT '账号/控制台链接等信息(不存密码)',
  77. `start_date` DATE DEFAULT NULL COMMENT '开通/购买日期',
  78. `expire_date` DATE DEFAULT NULL COMMENT '到期日期',
  79. `cost` DECIMAL(12,2) DEFAULT 0.00 COMMENT '费用',
  80. `cost_cycle` TINYINT DEFAULT 1 COMMENT '计费周期: 1-月付 2-年付 3-一次性',
  81. `owner_id` BIGINT UNSIGNED NOT NULL COMMENT '负责人,关联sys_user.id',
  82. `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 1-使用中 2-即将到期 3-已过期 0-已停用',
  83. `remark` VARCHAR(500) DEFAULT NULL,
  84. `purchase_duration` TINYINT DEFAULT NULL COMMENT '购买时长: 8-按量 1-1个月 2-2个月 3-3个月 4-6个月 5-1年 6-2年 7-3年',
  85. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  86. `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  87. `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除: 0-未删除 1-已删除',
  88. PRIMARY KEY (`id`),
  89. KEY `idx_type` (`type_id`),
  90. KEY `idx_owner` (`owner_id`),
  91. KEY `idx_expire` (`expire_date`)
  92. ) ENGINE=InnoDB COMMENT='资源表';
  93. -- ============================================
  94. -- 6. 项目-资源关联表(多对多)
  95. -- ============================================
  96. DROP TABLE IF EXISTS `project_resource`;
  97. CREATE TABLE `project_resource` (
  98. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  99. `project_id` BIGINT UNSIGNED NOT NULL,
  100. `resource_id` BIGINT UNSIGNED NOT NULL,
  101. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  102. PRIMARY KEY (`id`),
  103. UNIQUE KEY `uk_project_resource` (`project_id`, `resource_id`),
  104. KEY `idx_resource` (`resource_id`)
  105. ) ENGINE=InnoDB COMMENT='项目资源关联表';
  106. -- ============================================
  107. -- 6.1 资源续费记录表
  108. -- ============================================
  109. DROP TABLE IF EXISTS `resource_renewal`;
  110. CREATE TABLE `resource_renewal` (
  111. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  112. `resource_id` BIGINT UNSIGNED NOT NULL COMMENT '关联resource.id',
  113. `renew_date` DATE DEFAULT NULL COMMENT '续费操作/生效日期',
  114. `old_expire_date` DATE DEFAULT NULL COMMENT '续费前到期日期',
  115. `new_expire_date` DATE DEFAULT NULL COMMENT '续费后新到期日期',
  116. `duration_code` TINYINT DEFAULT NULL COMMENT '续费时长: 1-1个月 2-2个月 3-3个月 4-6个月 5-1年 6-2年 7-3年',
  117. `cost` DECIMAL(12,2) DEFAULT 0.00 COMMENT '本次续费金额(仅作历史记录, 不回写资源费用)',
  118. `remark` VARCHAR(500) DEFAULT NULL,
  119. `operator_id` BIGINT UNSIGNED DEFAULT 0 COMMENT '操作人, 关联sys_user.id',
  120. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  121. PRIMARY KEY (`id`),
  122. KEY `idx_resource` (`resource_id`)
  123. ) ENGINE=InnoDB COMMENT='资源续费记录表';
  124. -- ============================================
  125. -- 7. 到期提醒记录表(避免重复发送邮件)
  126. -- ============================================
  127. DROP TABLE IF EXISTS `expire_notify_log`;
  128. CREATE TABLE `expire_notify_log` (
  129. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  130. `resource_id` BIGINT UNSIGNED NOT NULL,
  131. `notify_stage` TINYINT NOT NULL COMMENT '提醒阶段: 1-提前30天 2-提前7天 3-已过期',
  132. `notify_email` VARCHAR(100) NOT NULL,
  133. `notify_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  134. PRIMARY KEY (`id`),
  135. UNIQUE KEY `uk_resource_stage` (`resource_id`, `notify_stage`)
  136. ) ENGINE=InnoDB COMMENT='到期提醒发送记录,同一资源同一阶段只发一次';
  137. -- ============================================
  138. -- 8. 操作日志表
  139. -- ============================================
  140. DROP TABLE IF EXISTS `operation_log`;
  141. CREATE TABLE `operation_log` (
  142. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  143. `user_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '操作人(0=系统操作,定时任务等非 HTTP 场景)',
  144. `module` VARCHAR(50) NOT NULL COMMENT '模块: 资源/项目/用户/字典',
  145. `action` VARCHAR(50) NOT NULL COMMENT '操作: 新增/编辑/删除/关联变更',
  146. `target_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '操作对象ID',
  147. `content` VARCHAR(1000) DEFAULT NULL COMMENT '操作详情',
  148. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  149. PRIMARY KEY (`id`),
  150. KEY `idx_user` (`user_id`),
  151. KEY `idx_target` (`target_id`)
  152. ) ENGINE=InnoDB COMMENT='操作日志表';
  153. -- ============================================
  154. -- 初始数据
  155. -- ============================================
  156. INSERT INTO `sys_user` (`username`, `password`, `real_name`, `email`, `role`) VALUES
  157. ('admin', '$2a$10$7JB720yubVSofvVWbazBLPRzKf5MhmwbAfNThBd3jzD09EQYDg.Ie', '系统管理员', 'admin@example.com', 1);
  158. -- 默认密码: admin123 (BCrypt加密,首次登录后请修改)
  159. INSERT INTO `resource_type` (`name`, `sort`) VALUES
  160. ('云服务器', 1), ('云数据库', 2), ('对象存储', 3), ('域名', 4),
  161. ('SSL证书', 5), ('CDN', 6), ('短信套餐', 7), ('邮件套餐', 8), ('其他', 99);
  162. INSERT INTO `provider` (`name`) VALUES
  163. ('阿里云'), ('腾讯云'), ('华为云'), ('AWS'), ('其他');