schema.sql 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 1-进行中 0-已下线',
  59. `remark` VARCHAR(500) DEFAULT NULL,
  60. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  61. `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  62. `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除: 0-未删除 1-已删除',
  63. PRIMARY KEY (`id`),
  64. KEY `idx_owner` (`owner_id`)
  65. ) ENGINE=InnoDB COMMENT='项目表';
  66. -- ============================================
  67. -- 5. 资源表(核心表)
  68. -- ============================================
  69. DROP TABLE IF EXISTS `resource`;
  70. CREATE TABLE `resource` (
  71. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  72. `name` VARCHAR(100) NOT NULL COMMENT '资源名称',
  73. `type_id` BIGINT UNSIGNED NOT NULL COMMENT '关联resource_type.id',
  74. `provider_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '关联provider.id',
  75. `account_info` VARCHAR(255) DEFAULT NULL COMMENT '账号/控制台链接等信息(不存密码)',
  76. `start_date` DATE DEFAULT NULL COMMENT '开通/购买日期',
  77. `expire_date` DATE DEFAULT NULL COMMENT '到期日期',
  78. `cost` DECIMAL(12,2) DEFAULT 0.00 COMMENT '费用',
  79. `cost_cycle` TINYINT DEFAULT 1 COMMENT '计费周期: 1-月付 2-年付 3-一次性',
  80. `owner_id` BIGINT UNSIGNED NOT NULL COMMENT '负责人,关联sys_user.id',
  81. `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 1-使用中 2-即将到期 3-已过期 0-已停用',
  82. `remark` VARCHAR(500) DEFAULT NULL,
  83. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  84. `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  85. `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除: 0-未删除 1-已删除',
  86. PRIMARY KEY (`id`),
  87. KEY `idx_type` (`type_id`),
  88. KEY `idx_owner` (`owner_id`),
  89. KEY `idx_expire` (`expire_date`)
  90. ) ENGINE=InnoDB COMMENT='资源表';
  91. -- ============================================
  92. -- 6. 项目-资源关联表(多对多)
  93. -- ============================================
  94. DROP TABLE IF EXISTS `project_resource`;
  95. CREATE TABLE `project_resource` (
  96. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  97. `project_id` BIGINT UNSIGNED NOT NULL,
  98. `resource_id` BIGINT UNSIGNED NOT NULL,
  99. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  100. PRIMARY KEY (`id`),
  101. UNIQUE KEY `uk_project_resource` (`project_id`, `resource_id`),
  102. KEY `idx_resource` (`resource_id`)
  103. ) ENGINE=InnoDB COMMENT='项目资源关联表';
  104. -- ============================================
  105. -- 7. 到期提醒记录表(避免重复发送邮件)
  106. -- ============================================
  107. DROP TABLE IF EXISTS `expire_notify_log`;
  108. CREATE TABLE `expire_notify_log` (
  109. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  110. `resource_id` BIGINT UNSIGNED NOT NULL,
  111. `notify_stage` TINYINT NOT NULL COMMENT '提醒阶段: 1-提前30天 2-提前7天 3-已过期',
  112. `notify_email` VARCHAR(100) NOT NULL,
  113. `notify_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  114. PRIMARY KEY (`id`),
  115. UNIQUE KEY `uk_resource_stage` (`resource_id`, `notify_stage`)
  116. ) ENGINE=InnoDB COMMENT='到期提醒发送记录,同一资源同一阶段只发一次';
  117. -- ============================================
  118. -- 8. 操作日志表
  119. -- ============================================
  120. DROP TABLE IF EXISTS `operation_log`;
  121. CREATE TABLE `operation_log` (
  122. `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  123. `user_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '操作人(0=系统操作,定时任务等非 HTTP 场景)',
  124. `module` VARCHAR(50) NOT NULL COMMENT '模块: 资源/项目/用户/字典',
  125. `action` VARCHAR(50) NOT NULL COMMENT '操作: 新增/编辑/删除/关联变更',
  126. `target_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '操作对象ID',
  127. `content` VARCHAR(1000) DEFAULT NULL COMMENT '操作详情',
  128. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  129. PRIMARY KEY (`id`),
  130. KEY `idx_user` (`user_id`),
  131. KEY `idx_target` (`target_id`)
  132. ) ENGINE=InnoDB COMMENT='操作日志表';
  133. -- ============================================
  134. -- 初始数据
  135. -- ============================================
  136. INSERT INTO `sys_user` (`username`, `password`, `real_name`, `email`, `role`) VALUES
  137. ('admin', '$2a$10$7JB720yubVSofvVWbazBLPRzKf5MhmwbAfNThBd3jzD09EQYDg.Ie', '系统管理员', 'admin@example.com', 1);
  138. -- 默认密码: admin123 (BCrypt加密,首次登录后请修改)
  139. INSERT INTO `resource_type` (`name`, `sort`) VALUES
  140. ('云服务器', 1), ('云数据库', 2), ('对象存储', 3), ('域名', 4),
  141. ('SSL证书', 5), ('CDN', 6), ('短信套餐', 7), ('邮件套餐', 8), ('其他', 99);
  142. INSERT INTO `provider` (`name`) VALUES
  143. ('阿里云'), ('腾讯云'), ('华为云'), ('AWS'), ('其他');