飞道的博客

谷粒在线教育--后台系统搭建及数据库设计规范

388人阅读  评论(0)

谷粒在线教育后台系统搭建及数据库设计

微服务架构设计

总体架构图



搭建项目

搭建父工程

  1. 使用 Spring Initializr 快速初始化一个 Spring Boot 模块,版本使用:2.2.1.RELEASE
  2. 删除父工程的src目录
  3. 配置pom.xml,统一项目依赖的版本
 1、 添加 <properties>确定依赖的版本
 2、配置 <dependencyManagement> 锁定依赖的版本
 
  1. 添加pom类型
  2. 删除<dependencies>内容,不添加任何依赖只做版本管理
pom 类型:一般作为父工程存在,父工程主要是进行统一的版本申明,并不定义具体的依赖关系,常见于多模块或者说聚合工程中使用。

jar类型:一般用于打包普通的java bean,资源库等,比如将公共的工具类放到一个模块,这个时候就其他模块如果想要使用的话,就可以直接引用便可,就把这个项目当作一个jar包来用。

war类型:作为一个web工程,常放一些静态资源,controller等。
//打包成父工程,进行统一版本管理
<packaging>pom</packaging>

在父工程guli-parent下面创建模块service

  1. new module 创建maven项目
  2. 该service模块也是父工程,使用聚合pom
<packaging>pom</packaging>
  1. 添加service模块所需要的公共依赖
    在service模块中添加所有api-service接口服务所需要的公共依赖

数据库设计规范

以下规约只针对本项目,更全面的文档参考《阿里巴巴Java开发手册》:五、MySQL数据库

  1. 库名与应用名称尽量一致
  2. 表名、字段名必须使用小写字母或数字,禁止出现数字开头
  3. 表名不使用复数名词
  4. 表的命名最好是加上“业务名称_表的作用”。如,edu_teacher
  5. 表必备三字段:id, gmt_create, gmt_modified 创建时间、修改时间
  6. 其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。
    (如果使用分库分表集群部署,则id类型为varchar,非自增,业务中使用分布式id生成器)
    gmt_create, gmt_modified 的类型均为 datetime 类型,前者现在时表示主动创建,后者过去分词表示被 动更新。
  7. 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint (1 表示是,0 表示否)
    说明:任何字段如果为非负数,必须是 unsigned。
    注意:POJO 类中的任何布尔类型的变量,都不要加 is 前缀数据库表示是与否的值,使用 tinyint 类型,坚持 is_xxx 的 命名方式是为了明确其取值含义与取值范围。
    正例:表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除
  8. 小数类型为 decimal,禁止使用 float 和 double。 说明:float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
  9. varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率。
  10. 唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。
    说明:uk_ 即 unique key;idx_ 即 index 的简称
  11. 不得使用外键与级联一切外键概念必须在应用层解决。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

以课程表为例

课程表数据库设计

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场