谷粒在线教育后台系统搭建及数据库设计
微服务架构设计
总体架构图
搭建项目
搭建父工程
- 使用
Spring Initializr
快速初始化一个 Spring Boot 模块,版本使用:2.2.1.RELEASE - 删除父工程的src目录
- 配置pom.xml,统一项目依赖的版本
1、 添加 <properties>确定依赖的版本
2、配置 <dependencyManagement> 锁定依赖的版本
- 添加pom类型
- 删除
<dependencies>
内容,不添加任何依赖只做版本管理
pom 类型:一般作为父工程存在,父工程主要是进行统一的版本申明,并不定义具体的依赖关系,常见于多模块或者说聚合工程中使用。
jar类型:一般用于打包普通的java bean,资源库等,比如将公共的工具类放到一个模块,这个时候就其他模块如果想要使用的话,就可以直接引用便可,就把这个项目当作一个jar包来用。
war类型:作为一个web工程,常放一些静态资源,controller等。
//打包成父工程,进行统一版本管理
<packaging>pom</packaging>
在父工程guli-parent下面创建模块service
- new module 创建maven项目
- 该service模块也是父工程,使用聚合pom
<packaging>pom</packaging>
- 添加service模块所需要的公共依赖
在service模块中添加所有api-service接口服务所需要的公共依赖
数据库设计规范
以下规约只针对本项目,更全面的文档参考《阿里巴巴Java开发手册》:五、MySQL数据库
- 库名与应用名称尽量一致
- 表名、字段名必须使用小写字母或数字,禁止出现数字开头
- 表名不使用复数名词
- 表的命名最好是加上“业务名称_表的作用”。如,edu_teacher
- 表必备三字段:id, gmt_create, gmt_modified 创建时间、修改时间
- 其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。
(如果使用分库分表集群部署,则id类型为varchar,非自增,业务中使用分布式id生成器)
gmt_create, gmt_modified 的类型均为 datetime 类型,前者现在时表示主动创建,后者过去分词表示被 动更新。 - 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint (1 表示是,0 表示否)
说明:任何字段如果为非负数,必须是 unsigned。
注意:POJO 类中的任何布尔类型的变量,都不要加 is 前缀。数据库表示是与否的值,使用 tinyint 类型,坚持 is_xxx 的 命名方式是为了明确其取值含义与取值范围。
正例:表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除。 - 小数类型为 decimal,禁止使用 float 和 double。 说明:float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
- varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率。
- 唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。
说明:uk_ 即 unique key;idx_ 即 index 的简称 - 不得使用外键与级联,一切外键概念必须在应用层解决。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。
以课程表为例
课程表数据库设计
CREATE TABLE `edu_course` (
`id` char(19) NOT NULL COMMENT '课程ID',
`teacher_id` char(19) NOT NULL COMMENT '课程讲师ID',
`subject_id` char(19) NOT NULL COMMENT '课程专业ID',
`subject_parent_id` char(19) NOT NULL COMMENT '课程专业父级ID',
`title` varchar(50) NOT NULL COMMENT '课程标题',
`price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '课程销售价格,设置为0则可免费观看',
`lesson_num` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '总课时',
`cover` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '课程封面图片路径',
`buy_count` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT '销售数量',
`view_count` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT '浏览数量',
`version` bigint(20) unsigned NOT NULL DEFAULT '1' COMMENT '乐观锁',
`status` varchar(10) NOT NULL DEFAULT 'Draft' COMMENT '课程状态 Draft未发布 Normal已发布',
`is_deleted` tinyint(3) DEFAULT NULL COMMENT '逻辑删除 1(true)已删除, 0(false)未删除',
`gmt_create` datetime NOT NULL COMMENT '创建时间',
`gmt_modified` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_title` (`title`),
KEY `idx_subject_id` (`subject_id`),
KEY `idx_teacher_id` (`teacher_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='课程';
转载:https://blog.csdn.net/qq_37126175/article/details/106156963
查看评论