schema.sql 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. -- auto_put_ad_mini 数据库表结构
  2. -- 数据库类型:MySQL 5.7+
  3. -- 字符集:utf8mb4
  4. -- =====================================================
  5. -- 1. 账户白名单表
  6. -- =====================================================
  7. CREATE TABLE IF NOT EXISTS account_whitelist (
  8. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  9. account_id BIGINT NOT NULL COMMENT '腾讯广告账户ID',
  10. account_name VARCHAR(200) DEFAULT NULL COMMENT '账户名称(备注用)',
  11. business_line VARCHAR(100) DEFAULT NULL COMMENT '业务线(用于分组管理)',
  12. enabled BOOLEAN DEFAULT TRUE COMMENT '是否启用(1=启用,0=禁用)',
  13. remark TEXT DEFAULT NULL COMMENT '备注说明',
  14. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  15. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  16. created_by VARCHAR(100) DEFAULT NULL COMMENT '创建人',
  17. updated_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
  18. UNIQUE KEY uk_account_id (account_id),
  19. KEY idx_enabled (enabled),
  20. KEY idx_business_line (business_line),
  21. KEY idx_updated_at (updated_at)
  22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='广告账户白名单';
  23. -- =====================================================
  24. -- 2. 系统配置表(Key-Value 存储)
  25. -- =====================================================
  26. CREATE TABLE IF NOT EXISTS system_config (
  27. id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  28. config_key VARCHAR(100) NOT NULL COMMENT '配置键(如 execution_enabled, cron_schedule)',
  29. config_value TEXT NOT NULL COMMENT '配置值(JSON 或字符串)',
  30. value_type ENUM('string', 'boolean', 'int', 'json') DEFAULT 'string' COMMENT '值类型',
  31. description VARCHAR(500) DEFAULT NULL COMMENT '配置说明',
  32. enabled BOOLEAN DEFAULT TRUE COMMENT '是否启用',
  33. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  34. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  35. updated_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
  36. UNIQUE KEY uk_config_key (config_key),
  37. KEY idx_enabled (enabled)
  38. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
  39. -- =====================================================
  40. -- 3. 决策历史记录表(可选,用于审计和分析)
  41. -- =====================================================
  42. CREATE TABLE IF NOT EXISTS decision_history (
  43. id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
  44. decision_date DATE NOT NULL COMMENT '决策日期',
  45. account_id BIGINT NOT NULL COMMENT '账户ID',
  46. ad_id BIGINT NOT NULL COMMENT '广告ID',
  47. ad_name VARCHAR(500) DEFAULT NULL COMMENT '广告名称',
  48. action VARCHAR(50) NOT NULL COMMENT '决策动作(pause, bid_down, bid_up, scale_up, observe, hold)',
  49. dimension VARCHAR(100) DEFAULT NULL COMMENT '决策维度(roi, fission, decay等)',
  50. reason TEXT DEFAULT NULL COMMENT '决策理由',
  51. current_bid DECIMAL(10, 2) DEFAULT NULL COMMENT '当前出价(元)',
  52. recommended_bid DECIMAL(10, 2) DEFAULT NULL COMMENT '推荐出价(元)',
  53. recommended_change_pct DECIMAL(6, 2) DEFAULT NULL COMMENT '调整幅度(%)',
  54. roi_7d DECIMAL(10, 4) DEFAULT NULL COMMENT '7日ROI',
  55. dynamic_roi DECIMAL(10, 4) DEFAULT NULL COMMENT '动态ROI',
  56. cost_7d_avg DECIMAL(10, 2) DEFAULT NULL COMMENT '7日均消耗(元)',
  57. executed BOOLEAN DEFAULT FALSE COMMENT '是否已执行',
  58. execution_status VARCHAR(50) DEFAULT NULL COMMENT '执行状态(success, failed, pending, skipped)',
  59. execution_error TEXT DEFAULT NULL COMMENT '执行错误信息',
  60. executed_at TIMESTAMP NULL DEFAULT NULL COMMENT '执行时间',
  61. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  62. KEY idx_decision_date (decision_date),
  63. KEY idx_account_id (account_id),
  64. KEY idx_ad_id (ad_id),
  65. KEY idx_action (action),
  66. KEY idx_executed (executed),
  67. KEY idx_created_at (created_at)
  68. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='决策历史记录';
  69. -- =====================================================
  70. -- 初始化数据
  71. -- =====================================================
  72. -- 插入默认系统配置
  73. INSERT INTO system_config (config_key, config_value, value_type, description) VALUES
  74. ('execution_enabled', 'false', 'boolean', '是否启用实际执行(生产环境谨慎开启)'),
  75. ('whitelist_enabled', 'true', 'boolean', '是否启用白名单机制'),
  76. ('cron_schedule', '0 2 * * *', 'string', 'APScheduler定时调度表达式(每天凌晨2点UTC)'),
  77. ('run_on_startup', 'false', 'boolean', '服务启动时是否立即执行一次'),
  78. ('max_concurrent_tasks', '1', 'int', '最大并发任务数'),
  79. ('approval_timeout_minutes', '30', 'int', '飞书审批超时时间(分钟)'),
  80. ('roi_low_factor', '0.75', 'string', '关停线系数(ROI < 渠道P50 * 0.75 触发关停)'),
  81. ('bid_down_roi_factor', '0.90', 'string', '降价线系数(ROI < 渠道P50 * 0.90 触发降价)'),
  82. ('bid_up_roi_factor', '1.05', 'string', '提价线系数(ROI > 渠道P50 * 1.05 触发提价)')
  83. ON DUPLICATE KEY UPDATE updated_at = CURRENT_TIMESTAMP;
  84. -- 插入示例白名单账户(请根据实际情况修改)
  85. INSERT INTO account_whitelist (account_id, account_name, business_line, enabled, remark, created_by) VALUES
  86. (80769799, '测试账户1', '小程序投流', TRUE, '初始白名单账户', 'system'),
  87. (71305011, '测试账户2', '小程序投流', TRUE, '初始白名单账户', 'system')
  88. ON DUPLICATE KEY UPDATE updated_at = CURRENT_TIMESTAMP;
  89. -- =====================================================
  90. -- 索引优化说明
  91. -- =====================================================
  92. -- 1. account_whitelist.uk_account_id: 保证账户唯一性
  93. -- 2. system_config.uk_config_key: 保证配置键唯一性
  94. -- 3. decision_history.idx_decision_date: 按日期查询决策记录
  95. -- 4. decision_history.idx_ad_id: 查询某个广告的历史决策
  96. -- 5. decision_history.idx_action: 按决策类型统计分析
  97. -- =====================================================
  98. -- 表分区建议(如数据量大)
  99. -- =====================================================
  100. -- ALTER TABLE decision_history PARTITION BY RANGE (YEAR(decision_date) * 100 + MONTH(decision_date)) (
  101. -- PARTITION p202604 VALUES LESS THAN (202605),
  102. -- PARTITION p202605 VALUES LESS THAN (202606),
  103. -- PARTITION p202606 VALUES LESS THAN (202607),
  104. -- PARTITION pmax VALUES LESS THAN MAXVALUE
  105. -- );