大家好,我是小镇做题家、独立开发者、AI技术观察员,AI编程助理小小程序员-小猿
我会在这里分享关于独立开发、AI编程技术、技术分享等内容,欢迎关注。
个人网站:www.pmmock.com
技术群、副业群、AI交流群等,想入群可以在我个人网站联系我或微信搜索brushwei加我。
如果觉得本文有用,一键三连(点赞、评论、转发),就是对我最大的支持。
从混乱到有序,一次借助AI重构CMS数据架构的实践之旅
续上一篇文章:下一步设计内容管理系统(CMS)的数据库。需求看似简单——文章发布、用户管理、图片上传,但是如果在没有产品原型的基础之上,是很难能够确定一个最合适的数据表结构。
因此AI的强大,让它完全接管设计工作,而是让它成为我的"第二大脑",帮助我验证每一个设计决策。这个决定,让整个设计过程有了意想不到的收获。
第一章:从一张白纸开始的基础表设计
1.1 直接AI生成
提问:
帮我设计一套cms核心内容部分的mysql数据表,要求符合专业级cms的特点,按照Alibaba编程规范的要求进行设计。
生成的MySQL数据表涵盖8张表,以下是主表:
CREATE TABLE `cms_content` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`content_no` varchar(32) NOT NULL COMMENT '内容编号',
`title` varchar(255) NOT NULL COMMENT '标题',
`subtitle` varchar(255) DEFAULT NULL COMMENT '副标题',
`summary` varchar(512) DEFAULT NULL COMMENT '摘要',
`content` longtext COMMENT '详细内容',
`cover_image` varchar(255) DEFAULT NULL COMMENT '封面图URL',
`content_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '内容类型:1-文章,2-视频,3-图集,4-音频',
`status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态:0-草稿,1-待审核,2-已发布,3-已下架',
`publish_time` datetime DEFAULT NULL COMMENT '发布时间',
`offline_time` datetime DEFAULT NULL COMMENT '下架时间',
`source` varchar(100) DEFAULT NULL COMMENT '来源',
`source_url` varchar(255) DEFAULT NULL COMMENT '来源链接',
`author_id` bigint(20) DEFAULT NULL COMMENT '作者ID',
`author_name` varchar(64) DEFAULT NULL COMMENT '作者名称',
`editor_id` bigint(20) DEFAULT NULL COMMENT '编辑ID',
`editor_name` varchar(64) DEFAULT NULL COMMENT '编辑名称',
`is_top` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否置顶:0-否,1-是',
`is_recommend` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否推荐:0-否,1-是',
`is_hot` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否热门:0-否,1-是',
`is_original` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否原创:0-否,1-是',
`view_count` int(11) NOT NULL DEFAULT '0' COMMENT '浏览量',
`like_count` int(11) NOT NULL DEFAULT '0' COMMENT '点赞数',
`comment_count` int(11) NOT NULL DEFAULT '0' COMMENT '评论数',
`share_count` int(11) NOT NULL DEFAULT '0' COMMENT '分享数',
`collect_count` int(11) NOT NULL DEFAULT '0' COMMENT '收藏数',
`seo_title` varchar(255) DEFAULT NULL COMMENT 'SEO标题',
`seo_keywords` varchar(255) DEFAULT NULL COMMENT 'SEO关键词',
`seo_description` varchar(512) DEFAULT NULL COMMENT 'SEO描述',
`template_id` bigint(20) DEFAULT NULL COMMENT '模板ID',
`channel_id` bigint(20) NOT NULL COMMENT '栏目ID',
`category_id` bigint(20) DEFAULT NULL COMMENT '分类ID',
`weight` int(11) NOT NULL DEFAULT '0' COMMENT '权重,用于排序',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`creator` varchar(64) DEFAULT NULL COMMENT '创建人',
`updater` varchar(64) DEFAULT NULL COMMENT '更新人',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除:0-否,1-是',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_content_no` (`content_no`),
KEY `idx_channel_id` (`channel_id`),
KEY `idx_category_id` (`category_id`),
KEY `idx_status_publish_time` (`status`,`publish_time`),
KEY `idx_create_time` (`create_time`),
KEY `idx_update_time` (`update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='内容主表';
看起来够用了,但从专业的系统架构师来看,存在不少问题,从我的理解主要是三个致命问题:
- 字段命名不规范:部分字段命中过于简单并与MySQL数据库关键字重合
- 缺少审计字段:谁在什么时候修改了文章?完全无法追踪
- 默认值问题:部分非核心字段默认为null,在代码编程的过程非常容易引起bug
1.2 优化提示词,实现规范化设计
在发现这些问题后,我决定重新调整提示词,使其更加具体和规范。以下是我总结出的一个可以生成高质量CMS数据表的提示词模板:
请帮我设计一套专业级CMS系统的MySQL数据表,要求如下:
1. 严格遵循Alibaba Java开发规范:
- 表名使用小写字母,单词间用下划线分隔
- 字段名称必须使用小写字母,单词间用下划线分隔
- 避免使用MySQL保留字作为字段名
- 所有字段必须有注释
2. 审计要求:
- 每张表必须包含标准审计字段:created_time, created_by, updated_time, updated_by
- 所有表都需要有version字段用于乐观锁控制
- 必须有deleted字段用于逻辑删除
3. 字段设计规范:
- 主键统一使用bigint类型,字段名为id
- 必须指定NOT NULL的字段都要有默认值
- 使用tinyint(1)存储布尔型字段,默认值必须为0
- 字符串类型字段要规范长度限制
4. 索引设计要求:
- 必须有主键索引
- 考虑查询场景添加合适的组合索引
- 索引名称要规范:主键为pk_xxx,唯一索引为uk_xxx,普通索引为idx_xxx
使用这个优化后的提示词,AI生成的数据表结构就更加规范和专业。例如,针对之前的内容表,主要改进如下:
-
字段命名更规范:
content改为article_contenttitle改为article_titlestatus改为article_status
-
完善的审计字段:
- 增加
version字段用于乐观锁 - 修改
creator/updater为created_by/updated_by - 增加操作人ID字段
created_by_id/updated_by_id
- 增加
-
更严谨的默认值设计:
- 所有是/否类型字段统一使用 tinyint(1),默认值为0
- 计数类字段(如view_count)设置NOT NULL DEFAULT '0'
- 字符串类型字段根据业务需求设置合理的长度限制
1.3 设计经验总结
通过这次借助AI设计CMS数据表的实践,我总结出以下几点经验:
-
明确约束很重要:向AI提供明确的规范和约束,能够得到更专业的输出结果。就像在现实中与团队协作一样,明确的规范能够保证产出的一致性。
-
分层递进提示:将复杂的设计需求分解为多个层次(命名规范、审计要求、字段设计、索引设计等),让AI能够全面考虑各个方面。
-
即时反馈优化:当发现AI生成的结果存在问题时,及时调整提示词中的具体要求,通过多轮对话不断优化设计方案。
-
模板化思维:将成功的提示词模板化,可以在未来的项目中复用,提高设计效率。
这种方法不仅帮助我们获得了一个更专业的数据库设计,还形成了一个可以持续优化的设计模板。在未来的项目中,我们可以基于这个模板继续改进,让AI辅助设计变得更加高效和规范。