schema.sql
75.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
-- 数据库模式初始化脚本
-- ====================================================================================================
-- 1) 核心:公司、用户、权限、订阅
-- ====================================================================================================
-- 创建公司表(多租户根)
CREATE TABLE IF NOT EXISTS `ai_companies` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '公司主键ID',
`name` VARCHAR(255) NOT NULL COMMENT '公司名称',
`domain` VARCHAR(100) DEFAULT NULL COMMENT '公司域名,用于多租户访问',
`status` ENUM('active','suspended','trial') DEFAULT 'trial' COMMENT '公司状态',
`trial_expiry_date` DATE DEFAULT NULL COMMENT '试用到期日',
`default_settings` JSON DEFAULT NULL COMMENT '企业默认设置(JSON)',
`billing_email` VARCHAR(100) DEFAULT NULL COMMENT '账单邮箱',
`contact_phone` VARCHAR(20) DEFAULT NULL COMMENT '联系电话',
`address` TEXT DEFAULT NULL COMMENT '公司地址',
`logo_url` VARCHAR(255) DEFAULT NULL COMMENT '公司Logo URL',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_companies_domain` (`domain`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='公司表(多租户根)';
-- 创建用户表
CREATE TABLE IF NOT EXISTS `ai_users` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '用户主键ID',
`company_id` INT NOT NULL COMMENT '关联公司ID',
`username` VARCHAR(50) NOT NULL COMMENT '用户名',
`email` VARCHAR(100) NOT NULL COMMENT '邮箱',
`password_hash` VARCHAR(255) NOT NULL COMMENT '密码哈希',
`full_name` VARCHAR(100) DEFAULT NULL COMMENT '用户全名',
`phone` VARCHAR(20) DEFAULT NULL COMMENT '联系电话',
`role` ENUM('admin','editor','viewer') DEFAULT 'editor' COMMENT '用户角色',
`avatar_url` VARCHAR(255) DEFAULT NULL COMMENT '头像URL',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`last_login_at` TIMESTAMP NULL DEFAULT NULL COMMENT '最后登录时间',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_users_username` (`username`),
UNIQUE KEY `uk_users_email` (`email`),
KEY `idx_users_company_id` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户表';
-- 创建AI功能表
CREATE TABLE IF NOT EXISTS `ai_features` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '功能主键ID',
`feature_key` VARCHAR(50) NOT NULL COMMENT '功能标识符',
`name` VARCHAR(100) NOT NULL COMMENT '功能名称',
`description` TEXT DEFAULT NULL COMMENT '功能描述',
`category` VARCHAR(50) DEFAULT NULL COMMENT '功能分类',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`config_schema` JSON DEFAULT NULL COMMENT '配置Schema(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_features_key` (`feature_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI功能表';
-- 创建AI配置表
CREATE TABLE IF NOT EXISTS `ai_dify_configs` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '配置主键ID',
`company_id` INT NOT NULL COMMENT '关联公司ID',
`name` VARCHAR(100) NOT NULL COMMENT '配置名称',
`provider` ENUM('dify','openai','azure','custom') NOT NULL COMMENT 'API提供商',
`api_key` VARCHAR(255) NOT NULL COMMENT 'API密钥',
`api_endpoint` VARCHAR(255) DEFAULT NULL COMMENT 'API端点',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`model_settings` JSON DEFAULT NULL COMMENT '模型设置(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
KEY `idx_dify_configs_company_id` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI配置表';
-- 创建文章生成任务表
CREATE TABLE IF NOT EXISTS `article_generation_tasks` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '任务主键ID',
`company_id` INT NOT NULL COMMENT '关联公司ID',
`user_id` INT NOT NULL COMMENT '关联用户ID',
`name` VARCHAR(255) NOT NULL COMMENT '任务名称',
`topic` VARCHAR(255) DEFAULT NULL COMMENT '主题',
`keywords` TEXT DEFAULT NULL COMMENT '关键词',
`article_count` INT DEFAULT 1 COMMENT '文章数量',
`platform_type` VARCHAR(50) DEFAULT NULL COMMENT '平台类型',
`status` ENUM('pending','processing','completed','failed') DEFAULT 'pending' COMMENT '任务状态',
`settings` JSON DEFAULT NULL COMMENT '生成设置(JSON)',
`result_summary` JSON DEFAULT NULL COMMENT '结果摘要(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`completed_at` TIMESTAMP NULL DEFAULT NULL COMMENT '完成时间',
PRIMARY KEY (`id`),
KEY `idx_tasks_company_id` (`company_id`),
KEY `idx_tasks_user_id` (`user_id`),
KEY `idx_tasks_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章生成任务表';
-- 创建生成文章表
CREATE TABLE IF NOT EXISTS `generated_articles` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '文章主键ID',
`task_id` INT NOT NULL COMMENT '关联任务ID',
`company_id` INT NOT NULL COMMENT '关联公司ID',
`title` VARCHAR(255) NOT NULL COMMENT '文章标题',
`content` LONGTEXT NOT NULL COMMENT '文章内容',
`status` ENUM('draft','selected','published') DEFAULT 'draft' COMMENT '文章状态',
`version` INT DEFAULT 1 COMMENT '版本号',
`is_selected` TINYINT(1) DEFAULT 0 COMMENT '是否选中',
`metadata` JSON DEFAULT NULL COMMENT '元数据(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
KEY `idx_articles_task_id` (`task_id`),
KEY `idx_articles_company_id` (`company_id`),
KEY `idx_articles_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='生成文章表';
-- 创建落地页项目表
CREATE TABLE IF NOT EXISTS `landing_page_projects` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '项目主键ID',
`company_id` INT NOT NULL COMMENT '关联公司ID',
`user_id` INT NOT NULL COMMENT '关联用户ID',
`name` VARCHAR(255) NOT NULL COMMENT '项目名称',
`description` TEXT DEFAULT NULL COMMENT '项目描述',
`industry` VARCHAR(100) DEFAULT NULL COMMENT '行业',
`status` ENUM('draft','generating','completed','published') DEFAULT 'draft' COMMENT '项目状态',
`settings` JSON DEFAULT NULL COMMENT '项目设置(JSON)',
`result_summary` JSON DEFAULT NULL COMMENT '结果摘要(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`completed_at` TIMESTAMP NULL DEFAULT NULL COMMENT '完成时间',
PRIMARY KEY (`id`),
KEY `idx_landing_projects_company_id` (`company_id`),
KEY `idx_landing_projects_user_id` (`user_id`),
KEY `idx_landing_projects_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='落地页项目表';
-- 创建网站项目表
CREATE TABLE IF NOT EXISTS `website_projects` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '项目主键ID',
`company_id` INT NOT NULL COMMENT '关联公司ID',
`user_id` INT NOT NULL COMMENT '关联用户ID',
`name` VARCHAR(255) NOT NULL COMMENT '项目名称',
`description` TEXT DEFAULT NULL COMMENT '项目描述',
`industry` VARCHAR(100) DEFAULT NULL COMMENT '行业',
`status` ENUM('draft','generating','completed','published') DEFAULT 'draft' COMMENT '项目状态',
`settings` JSON DEFAULT NULL COMMENT '项目设置(JSON)',
`result_summary` JSON DEFAULT NULL COMMENT '结果摘要(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
`completed_at` TIMESTAMP NULL DEFAULT NULL COMMENT '完成时间',
PRIMARY KEY (`id`),
KEY `idx_website_projects_company_id` (`company_id`),
KEY `idx_website_projects_user_id` (`user_id`),
KEY `idx_website_projects_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网站项目表';
-- 创建发布平台表
CREATE TABLE IF NOT EXISTS `publishing_platforms` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '平台主键ID',
`company_id` INT NOT NULL COMMENT '关联公司ID',
`name` VARCHAR(100) NOT NULL COMMENT '平台名称',
`type` VARCHAR(50) NOT NULL COMMENT '平台类型',
`config` JSON NOT NULL COMMENT '平台配置(JSON)',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
KEY `idx_platforms_company_id` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='发布平台表';
-- 创建关键词表
CREATE TABLE IF NOT EXISTS `keywords` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '关键词主键ID',
`company_id` INT NOT NULL COMMENT '关联公司ID',
`keyword` VARCHAR(255) NOT NULL COMMENT '关键词',
`search_volume` INT DEFAULT NULL COMMENT '搜索量',
`competition` ENUM('low','medium','high') DEFAULT NULL COMMENT '竞争度',
`trend_data` JSON DEFAULT NULL COMMENT '趋势数据(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_keywords_company_keyword` (`company_id`, `keyword`),
KEY `idx_keywords_company_id` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='关键词表';
-- 创建主题表
CREATE TABLE IF NOT EXISTS `topics` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主题主键ID',
`company_id` INT NOT NULL COMMENT '关联公司ID',
`name` VARCHAR(255) NOT NULL COMMENT '主题名称',
`description` TEXT DEFAULT NULL COMMENT '主题描述',
`related_keywords` JSON DEFAULT NULL COMMENT '相关关键词(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
KEY `idx_topics_company_id` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='主题表';
-- ====================================================================================================
-- 2) 订阅与计费系统
-- ====================================================================================================
-- 订阅计划定义表
-- 定义可用的订阅计划及其基本属性。
CREATE TABLE `ai_subscription_plans` (
`id` INT NOT NULL AUTO_INCREMENT,
`plan_key` VARCHAR(50) NOT NULL COMMENT '计划标识符(如 free, basic, premium)',
`name` VARCHAR(100) NOT NULL COMMENT '计划显示名称',
`description` TEXT DEFAULT NULL COMMENT '计划描述',
`price_monthly` DECIMAL(10,2) DEFAULT 0.00 COMMENT '月费价格',
`price_yearly` DECIMAL(10,2) DEFAULT 0.00 COMMENT '年费价格',
`max_users` INT DEFAULT 1 COMMENT '最大用户数',
`max_storage_mb` INT DEFAULT 100 COMMENT '最大存储空间(MB)',
`max_api_calls_per_day` INT DEFAULT 1000 COMMENT '每日API调用限制',
`features` JSON DEFAULT NULL COMMENT '包含的功能列表(JSON)',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`sort_order` INT DEFAULT 0 COMMENT '排序权重',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_plans_plan_key` (`plan_key`),
KEY `idx_plans_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订阅计划定义表';
-- 公司订阅记录表
-- 记录每个公司的订阅历史和当前状态。
CREATE TABLE `ai_company_subscriptions` (
`id` INT NOT NULL AUTO_INCREMENT,
`company_id` INT NOT NULL COMMENT '公司ID',
`plan_id` INT NOT NULL COMMENT '订阅计划ID',
`plan_key` VARCHAR(50) NOT NULL COMMENT '冗余字段:计划标识符',
`subscription_type` ENUM('monthly','yearly') DEFAULT 'monthly' COMMENT '订阅类型',
`status` ENUM('active','cancelled','expired','suspended') DEFAULT 'active' COMMENT '订阅状态',
`start_date` DATE NOT NULL COMMENT '订阅开始日期',
`end_date` DATE DEFAULT NULL COMMENT '订阅结束日期',
`next_billing_date` DATE DEFAULT NULL COMMENT '下次计费日期',
`trial_start_date` DATE DEFAULT NULL COMMENT '试用开始日期',
`trial_end_date` DATE DEFAULT NULL COMMENT '试用结束日期',
`amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '订阅金额',
`payment_method` VARCHAR(50) DEFAULT NULL COMMENT '支付方式',
`payment_status` ENUM('pending','paid','failed','refunded') DEFAULT 'pending' COMMENT '支付状态',
`auto_renew` TINYINT(1) DEFAULT 1 COMMENT '是否自动续费',
`cancel_reason` TEXT DEFAULT NULL COMMENT '取消原因',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_subscriptions_company` (`company_id`),
KEY `idx_subscriptions_status` (`status`),
KEY `idx_subscriptions_next_billing` (`next_billing_date`),
CONSTRAINT `fk_subscription_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_subscription_plan` FOREIGN KEY (`plan_id`) REFERENCES `ai_subscription_plans` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公司订阅记录表';
-- 订阅支付记录表
-- 记录具体的支付交易。
CREATE TABLE `ai_subscription_payments` (
`id` INT NOT NULL AUTO_INCREMENT,
`subscription_id` INT NOT NULL COMMENT '订阅ID',
`company_id` INT NOT NULL COMMENT '公司ID',
`amount` DECIMAL(10,2) NOT NULL COMMENT '支付金额',
`currency` VARCHAR(3) DEFAULT 'CNY' COMMENT '货币类型',
`payment_method` VARCHAR(50) DEFAULT NULL COMMENT '支付方式(如 alipay, wechat, stripe)',
`transaction_id` VARCHAR(255) DEFAULT NULL COMMENT '交易ID',
`payment_status` ENUM('pending','success','failed','refunded') DEFAULT 'pending' COMMENT '支付状态',
`payment_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '支付时间',
`period_start` DATE DEFAULT NULL COMMENT '计费周期开始日期',
`period_end` DATE DEFAULT NULL COMMENT '计费周期结束日期',
`invoice_url` VARCHAR(500) DEFAULT NULL COMMENT '发票URL',
`failure_reason` TEXT DEFAULT NULL COMMENT '失败原因',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_payments_company` (`company_id`),
KEY `idx_payments_subscription` (`subscription_id`),
KEY `idx_payments_status` (`payment_status`),
CONSTRAINT `fk_payment_subscription` FOREIGN KEY (`subscription_id`) REFERENCES `ai_company_subscriptions` (`id`),
CONSTRAINT `fk_payment_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订阅支付记录表';
-- ====================================================================================================
-- 3) AI功能模块与权限控制
-- ====================================================================================================
-- AI功能模块定义表
-- 定义系统提供的所有AI功能模块。
CREATE TABLE `ai_features` (
`id` INT NOT NULL AUTO_INCREMENT,
`feature_key` VARCHAR(50) NOT NULL COMMENT '功能标识符 (如 ai_copywriting, ai_landing_page)',
`name` VARCHAR(100) NOT NULL COMMENT '功能名称',
`description` TEXT DEFAULT NULL COMMENT '功能描述',
`category` VARCHAR(50) DEFAULT NULL COMMENT '功能分类(如 content, marketing, website)',
`is_premium` TINYINT(1) DEFAULT 0 COMMENT '是否为高级功能',
`sort_order` INT DEFAULT 0 COMMENT '排序权重',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_features_key` (`feature_key`),
KEY `idx_features_category` (`category`),
KEY `idx_features_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI功能模块定义表';
-- 订阅计划功能权限表
-- 定义每个订阅计划对各AI功能的访问权限和使用限制。
CREATE TABLE `ai_plan_features` (
`id` INT NOT NULL AUTO_INCREMENT,
`plan_id` INT NOT NULL COMMENT '订阅计划ID',
`feature_id` INT NOT NULL COMMENT '功能ID',
`is_allowed` TINYINT(1) DEFAULT 1 COMMENT '是否允许使用',
`usage_limit` INT DEFAULT NULL COMMENT '使用限制(如每月次数,NULL为无限制)',
`limit_period` ENUM('daily','monthly','yearly','total') DEFAULT 'monthly' COMMENT '限制周期',
`custom_config` JSON DEFAULT NULL COMMENT '自定义配置(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_plan_feature` (`plan_id`, `feature_id`),
CONSTRAINT `fk_planfeature_plan` FOREIGN KEY (`plan_id`) REFERENCES `ai_subscription_plans` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_planfeature_feature` FOREIGN KEY (`feature_id`) REFERENCES `ai_features` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订阅计划功能权限表';
-- 功能使用记录表
-- 记录用户对公司功能的具体使用情况,用于计费和分析。
CREATE TABLE `ai_feature_usage` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`company_id` INT NOT NULL COMMENT '公司ID',
`user_id` INT DEFAULT NULL COMMENT '用户ID(可选)',
`feature_id` INT NOT NULL COMMENT '功能ID',
`usage_type` VARCHAR(50) DEFAULT NULL COMMENT '使用类型(如 generate, export, analyze)',
`usage_count` INT DEFAULT 1 COMMENT '使用次数',
`related_resource_id` VARCHAR(100) DEFAULT NULL COMMENT '相关资源ID(如文章ID、页面ID)',
`ip_address` VARCHAR(45) DEFAULT NULL COMMENT '客户端IP',
`user_agent` TEXT DEFAULT NULL COMMENT '用户代理',
`metadata` JSON DEFAULT NULL COMMENT '额外元数据',
`used_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '使用时间',
PRIMARY KEY (`id`),
KEY `idx_usage_company_feature` (`company_id`, `feature_id`),
KEY `idx_usage_feature_date` (`feature_id`, `used_at`),
KEY `idx_usage_user` (`user_id`),
CONSTRAINT `fk_usage_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_usage_feature` FOREIGN KEY (`feature_id`) REFERENCES `ai_features` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='功能使用记录表';
-- 功能使用统计表(用于快速查询)
-- 按日统计功能使用量,提高查询效率。
CREATE TABLE `ai_feature_usage_stats` (
`id` INT NOT NULL AUTO_INCREMENT,
`company_id` INT NOT NULL COMMENT '公司ID',
`feature_id` INT NOT NULL COMMENT '功能ID',
`stat_date` DATE NOT NULL COMMENT '统计日期',
`usage_count` INT DEFAULT 0 COMMENT '当日使用次数',
`last_used_at` TIMESTAMP DEFAULT NULL COMMENT '最后使用时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_stats_company_feature_date` (`company_id`, `feature_id`, `stat_date`),
KEY `idx_stats_company` (`company_id`),
KEY `idx_stats_feature` (`feature_id`),
CONSTRAINT `fk_stats_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_stats_feature` FOREIGN KEY (`feature_id`) REFERENCES `ai_features` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='功能使用统计表';
-- ====================================================================================================
-- 4) AI内容生成核心:模型、Prompt、文件
-- ====================================================================================================
-- AI服务配置表
-- 存储连接到不同AI服务(如Dify, OpenAI)的配置信息。
CREATE TABLE `ai_dify_api_configs` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'AI配置主键ID',
`company_id` INT DEFAULT NULL COMMENT '公司ID(NULL 表示共享/通用)',
`provider` ENUM('dify','openai','anthropic','google','azure_openai','other') DEFAULT 'dify' COMMENT 'AI 提供方',
`name` VARCHAR(100) NOT NULL COMMENT '配置名称(便于识别)',
`base_url` VARCHAR(255) DEFAULT NULL COMMENT 'API 基础地址(可选)',
`api_key` VARCHAR(255) DEFAULT NULL COMMENT 'API Key/Token',
`model_name` VARCHAR(100) DEFAULT NULL COMMENT '模型名称',
`temperature` DECIMAL(3,2) DEFAULT 0.70 COMMENT '默认温度值',
`top_p` DECIMAL(3,2) DEFAULT 1.00 COMMENT 'TopP 值',
`max_tokens` INT DEFAULT 2048 COMMENT '最大生成 token 数',
`request_headers` JSON DEFAULT NULL COMMENT '额外请求头(JSON)',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_dify_company` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI 服务配置(Dify/OpenAI 等)';
-- Prompt 模板表
-- 存储可复用的Prompt模板。
CREATE TABLE `ai_prompt_templates` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'Prompt 模板主键ID',
`company_id` INT DEFAULT NULL COMMENT '公司ID(NULL 表示系统模板)',
`name` VARCHAR(100) NOT NULL COMMENT '模板名称',
`description` VARCHAR(255) DEFAULT NULL COMMENT '模板描述',
`language` VARCHAR(20) DEFAULT 'zh' COMMENT '默认语言编码(en/zh 等)',
`content` LONGTEXT NOT NULL COMMENT '模板内容(可含变量占位符)',
`variables` JSON DEFAULT NULL COMMENT '变量说明(JSON)',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_prompt_company` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Prompt 模板表';
-- 上传文件表
-- 管理用户上传的文件,如知识库、图片、视频等。
CREATE TABLE `ai_uploaded_files` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '上传文件主键ID',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`user_id` INT NOT NULL COMMENT '上传者用户ID(外键)',
`file_name` VARCHAR(255) NOT NULL COMMENT '原始文件名',
`file_path` VARCHAR(500) NOT NULL COMMENT '服务器存储路径或外部URL',
`file_type` ENUM('knowledge','image','video','document','other') NOT NULL COMMENT '文件类型',
`file_size` BIGINT DEFAULT 0 COMMENT '文件大小(字节)',
`mime_type` VARCHAR(100) DEFAULT NULL COMMENT 'MIME 类型',
`checksum` VARCHAR(64) DEFAULT NULL COMMENT '校验和(可选)',
`version` INT DEFAULT 1 COMMENT '版本号(用于版本控制)',
`status` ENUM('active','archived','deleted') DEFAULT 'active' COMMENT '文件状态',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
PRIMARY KEY (`id`),
KEY `idx_files_company` (`company_id`),
KEY `idx_files_user` (`user_id`),
CONSTRAINT `fk_file_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`),
CONSTRAINT `fk_file_user` FOREIGN KEY (`user_id`) REFERENCES `ai_users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='上传文件表(知识库/媒体等)';
-- ====================================================================================================
-- 5) AI内容生成:文章
-- ====================================================================================================
-- 文章类型表
-- 分类文章,如产品介绍、新闻稿等。
CREATE TABLE `ai_article_types` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '文章类型主键ID',
`name` VARCHAR(50) NOT NULL COMMENT '文章类型名称(如产品介绍)',
`description` VARCHAR(255) DEFAULT NULL COMMENT '类型说明',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_article_types_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章类型表';
-- 文章生成配置表
-- 存储文章生成的参数和偏好设置。
CREATE TABLE `ai_article_generation_configs` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '文章生成配置主键ID',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`name` VARCHAR(100) NOT NULL COMMENT '配置名称',
`platform_id` INT DEFAULT NULL COMMENT '适用发布平台ID(可选)',
`article_type_id` INT DEFAULT NULL COMMENT '文章类型ID(外键)',
`writing_language` VARCHAR(20) DEFAULT 'en' COMMENT '写作语言(en/zh)',
`remove_ai_tone` TINYINT(1) DEFAULT 1 COMMENT '是否去除AI味道',
`ai_taste_level` ENUM('colloquial','junior_high','senior_high','professional') DEFAULT 'junior_high' COMMENT 'AI风格等级',
`article_length_min` INT DEFAULT 800 COMMENT '最小长度(字符)',
`article_length_max` INT DEFAULT 1500 COMMENT '最大长度(字符)',
`auto_seo_optimization` TINYINT(1) DEFAULT 1 COMMENT '自动SEO优化',
`keyword_density_min` DECIMAL(5,2) DEFAULT 1.00 COMMENT '关键词密度下限(%)',
`keyword_density_max` DECIMAL(5,2) DEFAULT 2.00 COMMENT '关键词密度上限(%)',
`auto_geo_optimization` TINYINT(1) DEFAULT 1 COMMENT '是否自动GEO优化',
`auto_structured_data` TINYINT(1) DEFAULT 1 COMMENT '是否自动生成结构化数据',
`multi_version_count` INT DEFAULT 3 COMMENT '生成版本数量',
`extra_options` JSON DEFAULT NULL COMMENT '额外选项(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_config_company` (`company_id`),
KEY `idx_config_platform` (`platform_id`),
KEY `idx_config_article_type` (`article_type_id`),
CONSTRAINT `fk_config_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`),
CONSTRAINT `fk_config_platform` FOREIGN KEY (`platform_id`) REFERENCES `ai_publishing_platforms` (`id`),
CONSTRAINT `fk_config_article_type` FOREIGN KEY (`article_type_id`) REFERENCES `ai_article_types` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI 文章生成配置';
-- 文章生成任务表
-- 记录每次文章生成的请求和状态。
CREATE TABLE `ai_article_generation_tasks` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '文章生成任务主键ID',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`user_id` INT NOT NULL COMMENT '发起用户ID(外键)',
`config_id` INT DEFAULT NULL COMMENT '使用的生成配置ID(外键)',
`article_theme` VARCHAR(255) DEFAULT NULL COMMENT '文章主题/标题(输入)',
`topic_ids` TEXT DEFAULT NULL COMMENT '所选话题ID列表(逗号分隔)',
`reference_urls` TEXT DEFAULT NULL COMMENT '参考URL列表(逗号分隔)',
`reference_content` LONGTEXT DEFAULT NULL COMMENT '高度参考链接抓取到的内容摘要',
`status` ENUM('pending','processing','completed','failed') DEFAULT 'pending' COMMENT '任务状态',
`progress` TINYINT DEFAULT 0 COMMENT '进度(0-100)',
`error_message` TEXT DEFAULT NULL COMMENT '错误信息',
`dify_api_config_id` INT DEFAULT NULL COMMENT '调用的AI配置ID(外键)',
`prompt_template_id` INT DEFAULT NULL COMMENT '使用的 Prompt 模板 ID(外键)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`completed_at` TIMESTAMP NULL DEFAULT NULL COMMENT '完成时间',
PRIMARY KEY (`id`),
KEY `idx_task_company_status` (`company_id`,`status`),
KEY `idx_task_user` (`user_id`),
KEY `idx_task_config` (`config_id`),
CONSTRAINT `fk_task_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`),
CONSTRAINT `fk_task_user` FOREIGN KEY (`user_id`) REFERENCES `ai_users` (`id`),
CONSTRAINT `fk_task_config` FOREIGN KEY (`config_id`) REFERENCES `ai_article_generation_configs` (`id`),
CONSTRAINT `fk_task_ai_config` FOREIGN KEY (`dify_api_config_id`) REFERENCES `ai_dify_api_configs` (`id`),
CONSTRAINT `fk_task_prompt_template` FOREIGN KEY (`prompt_template_id`) REFERENCES `ai_prompt_templates` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章生成任务';
-- 生成的文章表(多版本支持)
-- 存储AI生成的最终文章内容。
CREATE TABLE `ai_generated_articles` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '生成文章主键ID',
`task_id` INT DEFAULT NULL COMMENT '来源生成任务ID(外键,可空)',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`version` INT DEFAULT 1 COMMENT '文章版本号(用于多版本)',
`title` VARCHAR(255) DEFAULT NULL COMMENT '文章标题',
`content` LONGTEXT DEFAULT NULL COMMENT '文章纯文本内容(不含HTML)',
`html_content` LONGTEXT DEFAULT NULL COMMENT '文章HTML格式内容(含排版)',
`faq_section` JSON DEFAULT NULL COMMENT 'FAQ 部分(JSON)',
`structured_data` JSON DEFAULT NULL COMMENT '结构化数据 JSON-LD(全文)',
`word_count` INT DEFAULT 0 COMMENT '文章字数统计',
`keyword_density` JSON DEFAULT NULL COMMENT '关键词密度分析结果(JSON)',
`is_selected` TINYINT(1) DEFAULT 0 COMMENT '是否被选为最终版本(1是)',
`status` ENUM('draft','approved','archived','deleted') DEFAULT 'draft' COMMENT '文章状态',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
KEY `idx_articles_company_status` (`company_id`,`status`),
KEY `idx_articles_task` (`task_id`),
CONSTRAINT `fk_article_task` FOREIGN KEY (`task_id`) REFERENCES `ai_article_generation_tasks` (`id`),
CONSTRAINT `fk_article_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='生成的文章表(多版本支持)';
-- 文章FAQ列表
-- 存储文章的FAQ部分。
CREATE TABLE `ai_article_faqs` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '文章 FAQ 主键ID',
`article_id` INT NOT NULL COMMENT '文章ID(外键)',
`question` VARCHAR(255) NOT NULL COMMENT 'FAQ 问题',
`answer` TEXT NOT NULL COMMENT 'FAQ 回答',
PRIMARY KEY (`id`),
KEY `idx_article_faqs_article` (`article_id`),
CONSTRAINT `fk_faq_article` FOREIGN KEY (`article_id`) REFERENCES `ai_generated_articles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章 FAQ 列表';
-- 文章结构化数据
-- 存储文章的结构化数据(JSON-LD)。
CREATE TABLE `ai_article_structured_data` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '结构化数据主键ID',
`article_id` INT NOT NULL COMMENT '文章ID(外键)',
`json_ld` JSON NOT NULL COMMENT 'JSON-LD 结构化数据内容',
PRIMARY KEY (`id`),
KEY `idx_structured_article` (`article_id`),
CONSTRAINT `fk_structured_article` FOREIGN KEY (`article_id`) REFERENCES `ai_generated_articles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章结构化数据(单独表便于管理/更新)';
-- 文章媒体资源
-- 存储文章关联的图片、视频等媒体。
CREATE TABLE `ai_article_media` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '文章媒体资源主键ID',
`article_id` INT NOT NULL COMMENT '文章ID(外键)',
`media_type` ENUM('image','video','audio') NOT NULL COMMENT '媒体类型',
`url` VARCHAR(500) NOT NULL COMMENT '媒体链接或存储路径',
`prompt` TEXT DEFAULT NULL COMMENT '生成提示语(AI 配图时记录)',
`source_type` ENUM('ai_generated','user_provided','external') DEFAULT 'external' COMMENT '资源来源类型',
`alt_text` VARCHAR(255) DEFAULT NULL COMMENT '图片替代文本(SEO)',
`caption` VARCHAR(255) DEFAULT NULL COMMENT '图片说明/标题',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
PRIMARY KEY (`id`),
KEY `idx_media_article` (`article_id`),
CONSTRAINT `fk_media_article` FOREIGN KEY (`article_id`) REFERENCES `ai_generated_articles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章媒体资源(多张图片/多视频)';
-- 文章多语言翻译表
-- 存储文章的不同语言版本。
CREATE TABLE `ai_article_translations` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '文章翻译主键ID',
`article_id` INT NOT NULL COMMENT '原文章ID(外键)',
`language` VARCHAR(20) NOT NULL COMMENT '翻译目标语言(如 en/zh)',
`title` VARCHAR(255) DEFAULT NULL COMMENT '译文标题',
`content` LONGTEXT DEFAULT NULL COMMENT '译文纯文本内容',
`html_content` LONGTEXT DEFAULT NULL COMMENT '译文 HTML 内容',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_article_language` (`article_id`,`language`),
KEY `idx_translations_article` (`article_id`),
CONSTRAINT `fk_translation_article` FOREIGN KEY (`article_id`) REFERENCES `ai_generated_articles` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章多语言翻译表';
-- ====================================================================================================
-- 6) AI内容生成:落地页
-- ====================================================================================================
-- 落地页模板表
-- 存储可用的落地页布局模板。
CREATE TABLE `ai_landing_page_templates` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '落地页模板主键ID',
`name` VARCHAR(100) NOT NULL COMMENT '模板名称(如:单栏布局)',
`code` VARCHAR(50) NOT NULL COMMENT '模板代码(如:single-column)',
`description` VARCHAR(255) DEFAULT NULL COMMENT '模板描述',
`preview_image_url` VARCHAR(255) DEFAULT NULL COMMENT '预览图URL',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_lp_templates_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='落地页布局与设计模板';
-- 落地页项目表
-- 代表一个完整的落地页创建流程。
CREATE TABLE `ai_landing_page_projects` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '落地页项目主键ID',
`company_id` INT NOT NULL COMMENT '所属公司ID(外键)',
`user_id` INT NOT NULL COMMENT '创建者用户ID(外键)',
`name` VARCHAR(255) NOT NULL COMMENT '落地页项目名称(用于内部识别)',
`status` ENUM('draft','configuring','generated','published','archived') DEFAULT 'draft' COMMENT '项目状态',
`last_step_completed` INT DEFAULT 0 COMMENT '最后完成的步骤号',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
KEY `idx_lp_projects_company` (`company_id`),
KEY `idx_lp_projects_user` (`user_id`),
CONSTRAINT `fk_lp_project_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`),
CONSTRAINT `fk_lp_project_user` FOREIGN KEY (`user_id`) REFERENCES `ai_users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI落地页构建项目表';
-- 落地页各步骤配置数据
-- 存储落地页构建过程中用户输入的所有配置信息。
CREATE TABLE `ai_landing_page_step_configs` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '配置主键ID',
`project_id` INT NOT NULL COMMENT '落地页项目ID(外键)',
-- Step 1: 目标用户
`target_audience_desc` TEXT COMMENT '目标用户描述',
`user_pain_points` TEXT COMMENT '用户痛点(可JSON或换行分隔)',
`user_expectations` TEXT COMMENT '用户期望结果',
`age_groups` VARCHAR(255) DEFAULT NULL COMMENT '年龄段(逗号分隔)',
`gender_preference` ENUM('male','female','balanced') DEFAULT 'balanced' COMMENT '性别倾向',
`behavior_characteristics` VARCHAR(255) DEFAULT NULL COMMENT '用户行为特征(逗号分隔)',
`decision_making_styles` VARCHAR(255) DEFAULT NULL COMMENT '用户决策方式(逗号分隔)',
-- Step 2: 落地页目标
`industry_primary` VARCHAR(100) DEFAULT NULL COMMENT '一级行业',
`industry_secondary` VARCHAR(100) DEFAULT NULL COMMENT '二级行业',
`industry_tertiary` VARCHAR(100) DEFAULT NULL COMMENT '子分类',
`marketing_goal` VARCHAR(50) DEFAULT NULL COMMENT '营销目标(lead-collection, product-sales等)',
-- Step 3: 风格与配色
`design_style` VARCHAR(50) DEFAULT NULL COMMENT '设计风格(modern, professional等)',
`primary_color` VARCHAR(20) DEFAULT NULL COMMENT '主色调',
`accent_color` VARCHAR(20) DEFAULT NULL COMMENT '辅助色调',
`template_id` INT DEFAULT NULL COMMENT '布局模板ID(外键)',
-- Step 4: 核心卖点
`unique_value_proposition` TEXT COMMENT '独特价值主张',
`core_advantages` JSON DEFAULT NULL COMMENT '核心优势列表(JSON数组)',
`primary_keyword` VARCHAR(255) DEFAULT NULL COMMENT '主要关键词',
`secondary_keywords` JSON DEFAULT NULL COMMENT '次要关键词列表(JSON数组)',
-- Step 5: 页面内容
`content_generation_type` ENUM('ai','custom','upload') DEFAULT 'ai' COMMENT '内容生成方式',
`company_name` VARCHAR(255) DEFAULT NULL COMMENT '公司全称',
`brand_name` VARCHAR(255) DEFAULT NULL COMMENT '品牌名称',
`company_description` TEXT COMMENT '公司介绍',
`video_url` VARCHAR(500) DEFAULT NULL COMMENT '视频链接',
`logo_file_id` INT DEFAULT NULL COMMENT '公司Logo文件ID(关联ai_uploaded_files)',
`contact_info` JSON DEFAULT NULL COMMENT '联系信息(地址、电话、邮箱、工作时间)',
`social_media_links` JSON DEFAULT NULL COMMENT '社交媒体链接(JSON数组)',
-- Step 6: CTA
`primary_cta_text` VARCHAR(100) DEFAULT NULL COMMENT '主要CTA按钮文案',
`secondary_cta_texts` JSON DEFAULT NULL COMMENT '次要CTA按钮文案(JSON数组)',
-- Step 7: 信任元素
`testimonials` JSON DEFAULT NULL COMMENT '客户评价/推荐语(JSON数组,含姓名、职位、内容)',
`social_proofs` JSON DEFAULT NULL COMMENT '社会证明数据(JSON数组,含标签、数值)',
-- Step 8: 表单字段
`form_fields` JSON DEFAULT NULL COMMENT '表单字段配置(JSON对象,key为字段名,value为是否启用)',
-- Step 9: 生成与部署
`page_title` VARCHAR(255) DEFAULT NULL COMMENT '页面SEO标题',
`page_description` TEXT COMMENT '页面SEO描述',
`ga_tracking_code` TEXT COMMENT '谷歌广告跟踪代码',
`deployment_method` ENUM('ftp','link') DEFAULT 'link' COMMENT '部署方式',
`deployment_config` JSON DEFAULT NULL COMMENT '部署配置(FTP信息或子域名)',
`pricing_plan` VARCHAR(50) DEFAULT NULL COMMENT '选择的套餐(basic, pro, enterprise)',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_lp_config_project` (`project_id`),
CONSTRAINT `fk_lp_config_project` FOREIGN KEY (`project_id`) REFERENCES `ai_landing_page_projects` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_lp_config_template` FOREIGN KEY (`template_id`) REFERENCES `ai_landing_page_templates` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='落地页各步骤配置数据';
-- 落地页AI生成任务表
-- 记录落地页生成的请求和状态。
CREATE TABLE `ai_landing_page_generation_tasks` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '任务主键ID',
`project_id` INT NOT NULL COMMENT '落地页项目ID (外键)',
`user_id` INT NOT NULL COMMENT '发起用户ID (外键)',
`status` ENUM('pending','processing','completed','failed') DEFAULT 'pending' COMMENT '任务状态',
`progress` TINYINT DEFAULT 0 COMMENT '进度 (0-100)',
`dify_api_config_id` INT DEFAULT NULL COMMENT '调用的AI配置ID (外键, 关联 ai_dify_api_configs)',
`prompt_template_id` INT DEFAULT NULL COMMENT '使用的Prompt模板ID (外键, 关联 ai_prompt_templates)',
`final_prompt_snapshot` LONGTEXT DEFAULT NULL COMMENT '发送给AI的最终Prompt快照(用于调试和记录)',
`error_message` TEXT DEFAULT NULL COMMENT '错误信息',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`completed_at` TIMESTAMP NULL DEFAULT NULL COMMENT '完成时间',
PRIMARY KEY (`id`),
KEY `idx_lp_task_project` (`project_id`),
KEY `idx_lp_task_status` (`status`),
CONSTRAINT `fk_lp_task_project` FOREIGN KEY (`project_id`) REFERENCES `ai_landing_page_projects` (`id`),
CONSTRAINT `fk_lp_task_user` FOREIGN KEY (`user_id`) REFERENCES `ai_users` (`id`),
CONSTRAINT `fk_lp_task_ai_config` FOREIGN KEY (`dify_api_config_id`) REFERENCES `ai_dify_api_configs` (`id`),
CONSTRAINT `fk_lp_task_prompt_template` FOREIGN KEY (`prompt_template_id`) REFERENCES `ai_prompt_templates` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='落地页AI生成任务表';
-- 最终生成的落地页(支持多版本)
-- 存储AI生成的最终落地页HTML代码。
CREATE TABLE `ai_generated_landing_pages` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '生成落地页主键ID',
`project_id` INT NOT NULL COMMENT '来源项目ID(外键)',
`version_code` VARCHAR(20) NOT NULL DEFAULT 'A' COMMENT '版本标识(用于A/B测试,如A, B)',
`html_content` LONGTEXT COMMENT '落地页HTML内容',
`status` ENUM('draft','final','published') DEFAULT 'draft' COMMENT '版本状态',
`publish_url` VARCHAR(500) DEFAULT NULL COMMENT '发布后的URL(使用link方式时)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '生成时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_lp_project_version` (`project_id`, `version_code`),
CONSTRAINT `fk_lp_page_project` FOREIGN KEY (`project_id`) REFERENCES `ai_landing_page_projects` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='最终生成的落地页(支持多版本)';
-- 落地页项目关联的媒体资产
-- 存储落地页项目中使用的图片、Logo等文件。
CREATE TABLE `ai_landing_page_assets` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '资产主键ID',
`project_id` INT NOT NULL COMMENT '落地页项目ID(外键)',
`asset_type` ENUM('product_image','certification_logo','testimonial_avatar') NOT NULL COMMENT '资产类型',
`uploaded_file_id` INT NOT NULL COMMENT '上传文件ID(外键)',
`related_data` JSON DEFAULT NULL COMMENT '相关数据(如关联的产品名或评价人)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_lp_assets_project` (`project_id`),
CONSTRAINT `fk_lp_asset_project` FOREIGN KEY (`project_id`) REFERENCES `ai_landing_page_projects` (`id`),
CONSTRAINT `fk_lp_asset_file` FOREIGN KEY (`uploaded_file_id`) REFERENCES `ai_uploaded_files` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='落地页项目关联的媒体资产';
-- ====================================================================================================
-- 7) AI内容生成:网站 (简化版)
-- ====================================================================================================
-- AI网站构建项目总表
-- 代表一个完整的网站创建流程。
CREATE TABLE `ai_website_projects` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '网站项目主键ID',
`company_id` INT NOT NULL COMMENT '所属公司ID (外键)',
`user_id` INT NOT NULL COMMENT '创建者用户ID (外键)',
`project_name` VARCHAR(255) NOT NULL COMMENT '项目名称 (用于内部识别)',
`site_name` VARCHAR(255) DEFAULT NULL COMMENT '最终生成的网站名称',
`status` ENUM('draft','configuring','generating','completed','published') DEFAULT 'draft' COMMENT '项目状态',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
KEY `idx_website_projects_company` (`company_id`),
CONSTRAINT `fk_website_project_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`),
CONSTRAINT `fk_website_project_user` FOREIGN KEY (`user_id`) REFERENCES `ai_users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI网站构建项目总表';
-- AI网站构建器配置(存储站点地图)
-- 存储网站的全局配置和站点地图结构。
CREATE TABLE `ai_website_build_configs` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '配置主键ID',
`project_id` INT NOT NULL COMMENT '网站项目ID (外键)',
`website_type` VARCHAR(50) DEFAULT NULL COMMENT '网站类型 (business, portfolio等)',
`site_identity` JSON DEFAULT NULL COMMENT '网站身份信息 (名称, 标语, 描述, 关键词)',
`design_preferences` JSON DEFAULT NULL COMMENT '设计偏好 (风格, 主色调)',
`sitemap_structure` JSON DEFAULT NULL COMMENT '站点地图结构定义 (JSON, 描述栏目层级和类型)',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_website_config_project` (`project_id`),
CONSTRAINT `fk_website_config_project` FOREIGN KEY (`project_id`) REFERENCES `ai_website_projects` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI网站构建器配置(存储站点地图)';
-- 网站栏目结构表 (支持无限层级)
-- 定义网站的栏目结构。
CREATE TABLE `ai_website_channels` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '网站栏目主键ID',
`project_id` INT NOT NULL COMMENT '所属网站项目ID (外键)',
`parent_id` INT DEFAULT NULL COMMENT '父栏目ID (用于实现层级结构)',
`name` VARCHAR(100) NOT NULL COMMENT '栏目名称 (如: 公司介绍, 新闻中心)',
`path` VARCHAR(100) NOT NULL COMMENT 'URL路径 (如: /about, /news)',
`channel_type` ENUM('single_page', 'article_list', 'product_list', 'custom') NOT NULL COMMENT '栏目类型',
`display_order` INT DEFAULT 0 COMMENT '显示顺序',
`is_visible_in_nav` TINYINT(1) DEFAULT 1 COMMENT '是否在主导航中可见',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_channel_project` (`project_id`),
KEY `idx_channel_parent` (`parent_id`),
CONSTRAINT `fk_channel_project` FOREIGN KEY (`project_id`) REFERENCES `ai_website_projects` (`id`),
CONSTRAINT `fk_channel_parent` FOREIGN KEY (`parent_id`) REFERENCES `ai_website_channels` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网站栏目结构表 (支持无限层级)';
-- 网站文章内容表
-- 存储网站栏目下的文章内容。
CREATE TABLE `ai_website_articles` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '文章主键ID',
`project_id` INT NOT NULL COMMENT '所属网站项目ID (外键)',
`channel_id` INT NOT NULL COMMENT '所属文章栏目ID (外键)',
`title` VARCHAR(255) NOT NULL COMMENT '文章标题',
`summary` TEXT DEFAULT NULL COMMENT '文章摘要',
`content` LONGTEXT COMMENT '文章主体内容 (Markdown或HTML)',
`status` ENUM('draft', 'published') DEFAULT 'draft' COMMENT '发布状态',
`published_at` TIMESTAMP NULL DEFAULT NULL COMMENT '发布时间',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_article_project_channel` (`project_id`, `channel_id`),
CONSTRAINT `fk_website_article_project` FOREIGN KEY (`project_id`) REFERENCES `ai_website_projects` (`id`),
CONSTRAINT `fk_website_article_channel` FOREIGN KEY (`channel_id`) REFERENCES `ai_website_channels` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网站文章内容表';
-- 网站产品内容表
-- 存储网站栏目下的产品内容。
CREATE TABLE `ai_website_products` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '产品主键ID',
`project_id` INT NOT NULL COMMENT '所属网站项目ID (外键)',
`channel_id` INT NOT NULL COMMENT '所属产品栏目ID (外键)',
`name` VARCHAR(255) NOT NULL COMMENT '产品名称',
`description` LONGTEXT COMMENT '产品详细描述',
`specifications` JSON DEFAULT NULL COMMENT '产品规格 (JSON格式)',
`main_image_url` VARCHAR(255) DEFAULT NULL COMMENT '产品主图URL',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_product_project_channel` (`project_id`, `channel_id`),
CONSTRAINT `fk_website_product_project` FOREIGN KEY (`project_id`) REFERENCES `ai_website_projects` (`id`),
CONSTRAINT `fk_website_product_channel` FOREIGN KEY (`channel_id`) REFERENCES `ai_website_channels` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网站产品内容表';
-- 网站AI生成任务表(支持父子任务)
-- 记录网站生成的请求和状态。
CREATE TABLE `ai_website_generation_tasks` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '任务主键ID',
`project_id` INT NOT NULL COMMENT '网站项目ID (外键)',
`user_id` INT NOT NULL COMMENT '发起用户ID (外键)',
`parent_task_id` INT DEFAULT NULL COMMENT '父任务ID (用于父子任务)',
`task_type` ENUM('full_site', 'generate_shell', 'generate_page_content', 'regenerate_channel') NOT NULL COMMENT '任务类型',
`target_id` INT DEFAULT NULL COMMENT '任务目标ID (如特定页面或栏目ID)',
`status` ENUM('pending','processing','completed','failed', 'waiting_for_children') DEFAULT 'pending' COMMENT '任务状态',
`dify_api_config_id` INT DEFAULT NULL COMMENT '调用的AI配置ID (外键)',
`config_snapshot` JSON DEFAULT NULL COMMENT '生成时刻的配置快照',
`error_message` TEXT DEFAULT NULL COMMENT '错误信息',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`completed_at` TIMESTAMP NULL DEFAULT NULL COMMENT '完成时间',
PRIMARY KEY (`id`),
KEY `idx_website_task_project` (`project_id`),
KEY `idx_website_task_parent` (`parent_task_id`),
CONSTRAINT `fk_website_task_project` FOREIGN KEY (`project_id`) REFERENCES `ai_website_projects` (`id`),
CONSTRAINT `fk_website_task_user` FOREIGN KEY (`user_id`) REFERENCES `ai_users` (`id`),
CONSTRAINT `fk_website_task_parent` FOREIGN KEY (`parent_task_id`) REFERENCES `ai_website_generation_tasks` (`id`),
CONSTRAINT `fk_website_task_ai_config` FOREIGN KEY (`dify_api_config_id`) REFERENCES `ai_dify_api_configs` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网站AI生成任务表(支持父子任务)';
-- 生成的网站页面(映射到栏目或内容项)
-- 存储AI生成的最终网站页面HTML代码。
CREATE TABLE `ai_generated_website_pages` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '生成页面主键ID',
`project_id` INT NOT NULL COMMENT '来源网站项目ID (外键)',
`task_id` INT NOT NULL COMMENT '来源生成任务ID (外键)',
`pageable_type` VARCHAR(100) NOT NULL COMMENT '关联类型 (Channel, Article, Product)',
`pageable_id` INT NOT NULL COMMENT '关联类型ID',
`file_name` VARCHAR(100) NOT NULL COMMENT '文件名 (如: index.html, news/article-1.html)',
`html_content` LONGTEXT COMMENT '页面的完整HTML内容',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '生成时间',
PRIMARY KEY (`id`),
KEY `idx_pageable` (`pageable_type`, `pageable_id`),
CONSTRAINT `fk_website_page_project` FOREIGN KEY (`project_id`) REFERENCES `ai_website_projects` (`id`),
CONSTRAINT `fk_website_page_task` FOREIGN KEY (`task_id`) REFERENCES `ai_website_generation_tasks` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='生成的网站页面(映射到栏目或内容项)';
-- ====================================================================================================
-- 8) 内容发布系统
-- ====================================================================================================
-- 目标网站类型表
-- 对目标平台进行大类划分。
CREATE TABLE `ai_publishing_platform_types` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '平台类型主键ID',
`name` VARCHAR(50) NOT NULL COMMENT '平台类型名称(如 Blog, Social, Video)',
`description` VARCHAR(255) DEFAULT NULL COMMENT '类型描述',
`icon` VARCHAR(100) DEFAULT NULL COMMENT '图标标识',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_platform_types_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='目标网站类型表';
-- 目标网站表
-- 定义支持发布的目标平台及其API配置模板。
CREATE TABLE `ai_publishing_platforms` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '目标网站主键ID',
`type_id` INT NOT NULL COMMENT '目标网站类型ID(外键)',
`name` VARCHAR(100) NOT NULL COMMENT '目标网站名称(如 WordPress, LinkedIn, 小红书)',
`code` VARCHAR(50) NOT NULL COMMENT '目标网站代码(唯一)',
`description` VARCHAR(255) DEFAULT NULL COMMENT '目标网站说明',
`icon` VARCHAR(100) DEFAULT NULL COMMENT '目标网站图标',
`auth_type` ENUM('oauth','api_key','basic','custom') NOT NULL COMMENT '认证类型',
`api_config_template` JSON DEFAULT NULL COMMENT 'API 配置模板(JSON schema)',
`character_limit` INT DEFAULT NULL COMMENT '目标网站字符限制(如微博)',
`is_active` TINYINT(1) DEFAULT 1 COMMENT '是否启用',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_platforms_code` (`code`),
KEY `idx_platforms_type` (`type_id`),
CONSTRAINT `fk_platform_type` FOREIGN KEY (`type_id`) REFERENCES `ai_publishing_platform_types` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='目标网站表';
-- 企业在目标网站的配置(API key/Token等)
-- 存储公司对特定平台的授权信息。
CREATE TABLE `ai_company_platform_configs` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '企业平台配置主键ID',
`company_id` INT NOT NULL COMMENT '授权公司ID(外键)',
`platform_id` INT NOT NULL COMMENT '目标网站ID(外键)',
`config_data` JSON NOT NULL COMMENT '目标网站API配置信息(如 token、client_id)',
`account_name` VARCHAR(100) DEFAULT NULL COMMENT '企业在该目标网站的账号名/展示名',
`is_enabled` TINYINT(1) DEFAULT 1 COMMENT '是否启用该配置',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_company_platform` (`company_id`,`platform_id`),
KEY `idx_company_platform_company` (`company_id`),
KEY `idx_company_platform_platform` (`platform_id`),
CONSTRAINT `fk_company_platform_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_company_platform_platform` FOREIGN KEY (`platform_id`) REFERENCES `ai_publishing_platforms` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='企业在目标网站的配置(API key/Token等)';
-- 定时发布任务表
-- 管理计划在未来某个时间点执行的发布任务。
CREATE TABLE `ai_scheduled_publishing_tasks` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '定时发布任务主键ID',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`publishable_type` VARCHAR(50) DEFAULT 'article' COMMENT '发布内容类型(article, landing_page)',
`publishable_id` INT NOT NULL COMMENT '发布内容ID',
`article_id` INT DEFAULT NULL COMMENT '要发布的文章ID(外键) - 兼容旧版',
`platform_config_id` INT NOT NULL COMMENT '使用的企业平台配置ID(外键)',
`schedule_time` TIMESTAMP NOT NULL COMMENT '计划发布时间',
`status` ENUM('scheduled','processing','success','failed','cancelled') DEFAULT 'scheduled' COMMENT '任务状态',
`retry_count` INT DEFAULT 0 COMMENT '已重试次数',
`max_retries` INT DEFAULT 3 COMMENT '最大重试次数',
`last_attempt_at` TIMESTAMP NULL DEFAULT NULL COMMENT '最近一次尝试执行时间',
`error_message` TEXT DEFAULT NULL COMMENT '错误信息(失败时记录)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_schedule_company_time` (`company_id`, `schedule_time`),
KEY `idx_schedule_status` (`status`),
CONSTRAINT `fk_schedule_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`),
CONSTRAINT `fk_schedule_platform_config` FOREIGN KEY (`platform_config_id`) REFERENCES `ai_company_platform_configs` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='定时发布任务表';
-- 目标网站发布记录表(执行日志)
-- 记录所有发布操作的执行结果。
CREATE TABLE `ai_publishing_records` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '发布记录主键ID',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`publishable_type` VARCHAR(50) DEFAULT 'article' COMMENT '发布内容类型(article, landing_page)',
`publishable_id` INT NOT NULL COMMENT '发布内容ID',
`article_id` INT DEFAULT NULL COMMENT '文章ID(外键) - 兼容旧版',
`platform_config_id` INT NOT NULL COMMENT '目标网站配置ID(外键)',
`scheduled_task_id` INT DEFAULT NULL COMMENT '来源的定时任务ID(如果是定时发布则关联)',
`status` ENUM('scheduled','published','failed') DEFAULT 'scheduled' COMMENT '发布记录状态',
`publish_url` VARCHAR(500) DEFAULT NULL COMMENT '发布后目标网站返回的文章URL',
`external_post_id` VARCHAR(255) DEFAULT NULL COMMENT '目标网站返回的外部帖文/文章ID',
`publish_time` TIMESTAMP NULL DEFAULT NULL COMMENT '实际发布时间',
`error_message` TEXT DEFAULT NULL COMMENT '失败原因(若失败)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
PRIMARY KEY (`id`),
KEY `idx_publishing_company_time` (`company_id`,`publish_time`),
KEY `idx_publishing_status` (`status`),
CONSTRAINT `fk_publishing_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`),
CONSTRAINT `fk_publishing_platform_config` FOREIGN KEY (`platform_config_id`) REFERENCES `ai_company_platform_configs` (`id`),
CONSTRAINT `fk_publishing_scheduled_task` FOREIGN KEY (`scheduled_task_id`) REFERENCES `ai_scheduled_publishing_tasks` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='目标网站发布记录表(执行日志)';
-- ====================================================================================================
-- 9) 关键词与话题管理 (SEO/内容规划)
-- ====================================================================================================
-- 关键词表
-- 管理用于内容生成和SEO的关键词。
CREATE TABLE `ai_keywords` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '关键词主键ID',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`keyword` VARCHAR(255) NOT NULL COMMENT '关键词文本',
`search_volume` INT DEFAULT 0 COMMENT '搜索量估算',
`cpc` DECIMAL(10,2) DEFAULT 0.00 COMMENT '估计每次点击成本',
`difficulty` TINYINT DEFAULT 0 COMMENT '关键词难度评分(0-100)',
`source` ENUM('baidu','google','manual','expansion','import') DEFAULT 'manual' COMMENT '来源类型',
`status` ENUM('pending','planned','generated','published') DEFAULT 'pending' COMMENT '关键词状态',
`tags` VARCHAR(255) DEFAULT NULL COMMENT '关键词标签,逗号分隔',
`usage_count` INT DEFAULT 0 COMMENT '关键词被文章使用次数',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_company_keyword` (`company_id`,`keyword`),
KEY `idx_keywords_company_status` (`company_id`,`status`),
CONSTRAINT `fk_keyword_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='关键词表';
-- 关键词扩展表(保存 related_searches)
-- 存储关键词的扩展词(如相关搜索词)。
CREATE TABLE `ai_keyword_expansions` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '关键词扩展主键ID',
`keyword_id` INT NOT NULL COMMENT '原始关键词ID(外键)',
`related_keyword` VARCHAR(255) NOT NULL COMMENT '扩展关键词(来自 related_searches 等)',
`source` ENUM('baidu','google','import') DEFAULT 'google' COMMENT '扩展来源',
`raw_response` JSON DEFAULT NULL COMMENT 'API 原始返回(便于溯源)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
PRIMARY KEY (`id`),
KEY `idx_keyword_exp_keyword` (`keyword_id`),
CONSTRAINT `fk_keyword_expansion_keyword` FOREIGN KEY (`keyword_id`) REFERENCES `ai_keywords` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='关键词扩展表(保存 related_searches)';
-- 话题表
-- 管理更宽泛的内容主题。
CREATE TABLE `ai_topics` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '话题主键ID',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`source_task_id` INT DEFAULT NULL COMMENT '来源的抓取任务ID(外键,可空)',
`title` VARCHAR(255) NOT NULL COMMENT '话题标题',
`description` TEXT DEFAULT NULL COMMENT '话题描述或摘要',
`source_url` VARCHAR(500) DEFAULT NULL COMMENT '原始来源链接(可选)',
`status` ENUM('raw','curated','rejected') DEFAULT 'raw' COMMENT '话题状态',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_topics_company_status` (`company_id`,`status`),
KEY `idx_topics_source_task` (`source_task_id`),
CONSTRAINT `fk_topic_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`),
CONSTRAINT `fk_topic_source_task` FOREIGN KEY (`source_task_id`) REFERENCES `ai_search_sources_tasks` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='话题表';
-- 话题与关键词的多对多映射
-- 建立话题和关键词之间的关联。
CREATE TABLE `ai_topic_keywords` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '话题-关键词关联主键ID',
`topic_id` INT NOT NULL COMMENT '话题ID(外键)',
`keyword_id` INT NOT NULL COMMENT '关键词ID(外键)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_topic_keyword` (`topic_id`,`keyword_id`),
KEY `idx_topic_keywords_topic` (`topic_id`),
KEY `idx_topic_keywords_keyword` (`keyword_id`),
CONSTRAINT `fk_topic_keyword_topic` FOREIGN KEY (`topic_id`) REFERENCES `ai_topics` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_topic_keyword_keyword` FOREIGN KEY (`keyword_id`) REFERENCES `ai_keywords` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='话题与关键词的多对多映射';
-- AI数据源配置表
-- 配置用于抓取话题的外部数据源(如SERP API)。
CREATE TABLE `ai_search_sources_api` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '数据源配置主键ID',
`name` VARCHAR(100) NOT NULL COMMENT '数据来源名称 (如 百度前10、Google also ask)',
`source_type` ENUM('serp_api', 'rss', 'custom_api', 'web_scraping', 'database') NOT NULL COMMENT '来源类型',
`api_config` JSON NOT NULL COMMENT 'API 配置',
`result_parser` JSON NOT NULL COMMENT '结果解析规则',
`is_active` BOOLEAN DEFAULT TRUE COMMENT '是否启用',
`priority` TINYINT UNSIGNED DEFAULT 10 COMMENT '优先级 (1-100, 数字越小优先级越高)',
`rate_limit` JSON COMMENT '限流配置 {"requests": 100, "period": 3600}',
`health_check` JSON COMMENT '健康检查配置',
`metadata` JSON COMMENT '元数据 (描述、版本等)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_source_name` (`name`),
INDEX `idx_source_type` (`source_type`),
INDEX `idx_source_active` (`is_active`),
INDEX `idx_source_priority` (`priority`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI数据源配置表';
-- AI数据源抓取任务表
-- 记录从外部数据源抓取话题的任务。
CREATE TABLE `ai_search_sources_tasks` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '话题抓取任务主键ID',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`user_id` INT NOT NULL COMMENT '发起任务的用户ID(外键)',
`topic_source_id` INT NOT NULL COMMENT '话题来源配置ID(外键)',
`keywords` TEXT DEFAULT NULL COMMENT '用于本次抓取的关键词快照(逗号分隔)',
`topic_id` INT DEFAULT NULL COMMENT '关联的话题ID(外键,可空)',
`keyword_id` INT DEFAULT NULL COMMENT '关联的关键词ID(外键,可空)',
`status` ENUM('pending','processing','completed','failed') DEFAULT 'pending' COMMENT '任务状态',
`result_count` INT DEFAULT 0 COMMENT '抓取结果数量',
`raw_response` JSON DEFAULT NULL COMMENT 'API 原始返回(JSON)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`completed_at` TIMESTAMP NULL DEFAULT NULL COMMENT '任务完成时间',
PRIMARY KEY (`id`),
KEY `idx_topic_fetch_company` (`company_id`),
KEY `idx_topic_fetch_source` (`topic_source_id`),
KEY `idx_topic_fetch_status` (`status`),
CONSTRAINT `fk_search_task_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`),
CONSTRAINT `fk_search_task_user` FOREIGN KEY (`user_id`) REFERENCES `ai_users` (`id`),
CONSTRAINT `fk_search_task_source` FOREIGN KEY (`topic_source_id`) REFERENCES `ai_search_sources_api` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI数据源抓取任务表';
-- ====================================================================================================
-- 10) 任务关联表 (连接生成任务与资源)
-- ====================================================================================================
-- 任务参考链接明细(可标注高度参考)
-- 存储文章生成任务中使用的参考链接。
CREATE TABLE `ai_task_references` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '任务参考链接主键ID',
`task_id` INT NOT NULL COMMENT '对应任务ID(外键)',
`url` VARCHAR(500) NOT NULL COMMENT '参考链接URL',
`title` VARCHAR(255) DEFAULT NULL COMMENT '页面标题(可选)',
`source_engine` VARCHAR(50) DEFAULT NULL COMMENT '来源引擎(google/baidu/zhihu等)',
`position` INT DEFAULT NULL COMMENT '在搜索结果中的排名位置',
`is_high_reference` TINYINT(1) DEFAULT 0 COMMENT '是否标记为高度参考(1是)',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
PRIMARY KEY (`id`),
KEY `idx_task_references_task` (`task_id`),
CONSTRAINT `fk_task_reference_task` FOREIGN KEY (`task_id`) REFERENCES `ai_article_generation_tasks` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='任务参考链接明细(可标注高度参考)';
-- 生成任务与关键词映射(规划用)
-- 将生成任务与计划使用的关键词关联。
CREATE TABLE `ai_task_keywords` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '任务-关键词关联主键ID',
`task_id` INT NOT NULL COMMENT '生成任务ID(外键)',
`keyword_id` INT NOT NULL COMMENT '关键词ID(外键)',
`is_primary` TINYINT(1) DEFAULT 0 COMMENT '是否主关键词',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_task_keyword` (`task_id`,`keyword_id`),
KEY `idx_task_keywords_task` (`task_id`),
KEY `idx_task_keywords_keyword` (`keyword_id`),
CONSTRAINT `fk_task_keyword_task` FOREIGN KEY (`task_id`) REFERENCES `ai_article_generation_tasks` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_task_keyword_keyword` FOREIGN KEY (`keyword_id`) REFERENCES `ai_keywords` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='生成任务与关键词映射(规划用)';
-- 生成任务与话题映射
-- 将生成任务与相关话题关联。
CREATE TABLE `ai_task_topics` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '任务-话题关联主键ID',
`task_id` INT NOT NULL COMMENT '生成任务ID(外键)',
`topic_id` INT NOT NULL COMMENT '话题ID(外键)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_task_topic` (`task_id`,`topic_id`),
KEY `idx_task_topics_task` (`task_id`),
KEY `idx_task_topics_topic` (`topic_id`),
CONSTRAINT `fk_task_topic_task` FOREIGN KEY (`task_id`) REFERENCES `ai_article_generation_tasks` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_task_topic_topic` FOREIGN KEY (`topic_id`) REFERENCES `ai_topics` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='生成任务与话题映射';
-- 任务知识库来源(公司库或上传的解析内容)
-- 指定生成任务使用的知识来源。
CREATE TABLE `ai_task_knowledge_sources` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '任务知识来源主键ID',
`task_id` INT NOT NULL COMMENT '任务ID(外键)',
`knowledge_type` ENUM('company','uploaded') NOT NULL COMMENT '知识来源类型(公司知识库/上传文件)',
`knowledge_id` INT DEFAULT NULL COMMENT '当 knowledge_type=uploaded 时,关联 ai_uploaded_files.id',
`content` LONGTEXT DEFAULT NULL COMMENT '若上传文件被解析,存解析后的文本内容',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
PRIMARY KEY (`id`),
KEY `idx_task_knowledge_task` (`task_id`),
KEY `idx_task_knowledge_knowledge` (`knowledge_id`),
CONSTRAINT `fk_task_knowledge_task` FOREIGN KEY (`task_id`) REFERENCES `ai_article_generation_tasks` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_task_knowledge_file` FOREIGN KEY (`knowledge_id`) REFERENCES `ai_uploaded_files` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='任务知识库来源(公司库或上传的解析内容)';
-- 文章与关键词关联(实际使用)
-- 将最终生成的文章与实际使用的关键词关联。
CREATE TABLE `ai_article_keywords` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '文章关键词关联主键ID',
`article_id` INT NOT NULL COMMENT '文章ID(外键)',
`keyword_id` INT NOT NULL COMMENT '关键词ID(外键)',
`is_primary` TINYINT(1) DEFAULT 0 COMMENT '是否主关键词(1主/0辅)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_article_keyword` (`article_id`,`keyword_id`),
KEY `idx_article_keywords_article` (`article_id`),
KEY `idx_article_keywords_keyword` (`keyword_id`),
CONSTRAINT `fk_article_keyword_article` FOREIGN KEY (`article_id`) REFERENCES `ai_generated_articles` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_article_keyword_keyword` FOREIGN KEY (`keyword_id`) REFERENCES `ai_keywords` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章与关键词关联(实际使用)';
-- 文章与话题关联
-- 将最终生成的文章与相关话题关联。
CREATE TABLE `ai_article_topics` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '文章话题关联主键ID',
`article_id` INT NOT NULL COMMENT '文章ID(外键)',
`topic_id` INT NOT NULL COMMENT '话题ID(外键)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_article_topic` (`article_id`,`topic_id`),
KEY `idx_article_topics_article` (`article_id`),
KEY `idx_article_topics_topic` (`topic_id`),
CONSTRAINT `fk_article_topic_article` FOREIGN KEY (`article_id`) REFERENCES `ai_generated_articles` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_article_topic_topic` FOREIGN KEY (`topic_id`) REFERENCES `ai_topics` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章与话题关联';
-- ====================================================================================================
-- 11) 统计与活动日志
-- ====================================================================================================
-- 用户活动日志(审计/分析)
-- 记录用户的常规活动,用于行为分析。
CREATE TABLE `ai_user_activity_logs` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '用户活动日志主键ID',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`user_id` INT NOT NULL COMMENT '用户ID(外键)',
`activity_type` VARCHAR(50) NOT NULL COMMENT '活动类型(如 login/create_article)',
`activity_details` JSON DEFAULT NULL COMMENT '活动详情(JSON)',
`ip_address` VARCHAR(45) DEFAULT NULL COMMENT '操作IP',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
PRIMARY KEY (`id`),
KEY `idx_activity_company_user` (`company_id`,`user_id`),
KEY `idx_activity_type` (`activity_type`),
CONSTRAINT `fk_activity_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`),
CONSTRAINT `fk_activity_user` FOREIGN KEY (`user_id`) REFERENCES `ai_users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户活动日志(审计/分析)';
-- 公司使用统计
-- 统计公司的资源使用情况,用于计费和容量管理。
CREATE TABLE `ai_company_usage_stats` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '公司用量统计主键ID',
`company_id` INT NOT NULL COMMENT '公司ID(外键)',
`stat_date` DATE NOT NULL COMMENT '统计日期',
`article_count` INT DEFAULT 0 COMMENT '当日生成文章数量',
`ai_token_usage` BIGINT DEFAULT 0 COMMENT '当日 AI 令牌使用量',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_company_date` (`company_id`,`stat_date`),
KEY `idx_usage_company` (`company_id`),
CONSTRAINT `fk_usage_stats_company` FOREIGN KEY (`company_id`) REFERENCES `ai_companies` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='公司使用统计';
SET FOREIGN_KEY_CHECKS = 1;