Design and Implementation of an Online Course Purchase System(03)

Database Design

Posted by Chen Xingxu on June 3, 2020

易课寄在线购课系统开发笔记(三)–数据库设计

概念结构设计

ER 图如图所示。

表的详细设计

通过对领域对象、业务对象及对象间关联的分析,对本系统的数据库表进行了设计。本系统数据库管理采用 MySQL。

建表前先运行

SET FOREIGN_KEY_CHECKS=0;

navicat 转存的 sql 文件默认有这句话

管理员信息表 ( ecourses_admin )

管理员信息表主要用于保存系统管理员的信息,主要字段包括:管理员 ID、管理员账号、管理员密码、手机号码、电子邮箱、创建时间、更新时间。

建表 SQL 语句

CREATE TABLE `ecourses_admin` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(32) NOT NULL COMMENT '密码,加密存储',
  `phone` varchar(20) DEFAULT NULL COMMENT '注册手机号',
  `email` varchar(50) DEFAULT NULL COMMENT '注册邮箱',
  `created` datetime NOT NULL,
  `updated` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`) USING BTREE,
  UNIQUE KEY `phone` (`phone`) USING BTREE,
  UNIQUE KEY `email` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户表';

用户信息表 ( ecourses_user )

用户信息表主要用于保存系统用户的信息,主要字段包括:用户 ID、用户账号、用户密码、手机号码、电子邮箱、创建时间、更新时间。

建表 SQL 语句

CREATE TABLE `ecourses_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(32) NOT NULL COMMENT '密码,加密存储',
  `phone` varchar(20) DEFAULT NULL COMMENT '注册手机号',
  `email` varchar(50) DEFAULT NULL COMMENT '注册邮箱',
  `created` datetime NOT NULL,
  `updated` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`) USING BTREE,
  UNIQUE KEY `phone` (`phone`) USING BTREE,
  UNIQUE KEY `email` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=152163949050780 DEFAULT CHARSET=utf8 COMMENT='用户表';

首页内容表 ( ecourses_content )

首页内容表主要用于保存系统中首页内容的信息,主要字段包括:内容 ID、目录 ID、标题、子标题、标题描述、目标链接、图片链接、详细内容、创建时间、更新时间。

建表 SQL 语句

CREATE TABLE `ecourses_content` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `category_id` bigint(20) NOT NULL COMMENT '内容类目ID',
  `title` varchar(200) DEFAULT NULL COMMENT '内容标题',
  `sub_title` varchar(100) DEFAULT NULL COMMENT '子标题',
  `title_desc` varchar(500) DEFAULT NULL COMMENT '标题描述',
  `url` varchar(500) DEFAULT NULL COMMENT '链接',
  `pic` varchar(300) DEFAULT NULL COMMENT '图片绝对路径',
  `pic2` varchar(300) DEFAULT NULL COMMENT '图片2',
  `content` text COMMENT '内容',
  `created` datetime DEFAULT NULL,
  `updated` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `category_id` (`category_id`),
  KEY `updated` (`updated`)
) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8;

内容分类表 ( ecourses_content_category )

内容分类表主要用于保存系统中内容分类的信息,主要字段包括:类目 ID、父类目 ID、分类名称、状态、排列序号、该类目是否为父类目、创建时间、更新时间。

建表 SQL 语句

CREATE TABLE `ecourses_content_category` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '类目ID',
  `parent_id` bigint(20) DEFAULT NULL COMMENT '父类目ID=0时,代表的是一级的类目',
  `name` varchar(50) DEFAULT NULL COMMENT '分类名称',
  `status` int(1) DEFAULT '1' COMMENT '状态。可选值:1(正常),2(删除)',
  `sort_order` int(4) DEFAULT NULL COMMENT '排列序号,表示同级类目的展现次序,如数值相等则按名称次序排列。取值范围:大于零的整数',
  `is_parent` tinyint(1) DEFAULT '1' COMMENT '该类目是否为父类目,1为true,0为false',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`,`status`) USING BTREE,
  KEY `sort_order` (`sort_order`)
) ENGINE=InnoDB AUTO_INCREMENT=104 DEFAULT CHARSET=utf8 COMMENT='内容分类';

课程信息表 ( ecourses_item )

课程信息表主要用于保存系统中课程的信息,主要字段包括:课程表 ID、课程标题、课程卖点、课程价格、报名人数、课程统一识别码、课程图片链接、课程所属类目 ID、课程状态、课程视频地址、创建时间、更新时间。

建表 SQL 语句

CREATE TABLE `ecourses_item` (
  `id` bigint(20) NOT NULL COMMENT '课程id,同时也是课程编号',
  `title` varchar(100) NOT NULL COMMENT '课程标题',
  `sell_point` varchar(500) DEFAULT NULL COMMENT '课程卖点',
  `price` bigint(20) NOT NULL COMMENT '课程价格,单位为:分',
  `num` int(10) NOT NULL COMMENT '课程数量',
  `barcode` varchar(30) DEFAULT NULL COMMENT '课程条形码',
  `image` varchar(500) DEFAULT NULL COMMENT '课程图片',
  `cid` bigint(10) NOT NULL COMMENT '所属类目,叶子类目',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '课程状态,1-正常,2-下架,3-删除',
  `created` datetime NOT NULL COMMENT '创建时间',
  `updated` datetime NOT NULL COMMENT '更新时间',
  `video_path` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `cid` (`cid`),
  KEY `status` (`status`),
  KEY `updated` (`updated`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='课程表';

课程类目表 ( ecourses_item_cat )

课程类目表主要用于保存系统中课程类目的信息,主要字段包括:课程类目 ID、父类目 ID、类目名称、状态、排列序号、该类目是否为父类目、创建时间、更新时间。

建表 SQL 语句

CREATE TABLE `ecourses_item_cat` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '类目ID',
  `parent_id` bigint(20) DEFAULT NULL COMMENT '父类目ID=0时,代表的是一级的类目',
  `name` varchar(50) DEFAULT NULL COMMENT '类目名称',
  `status` int(1) DEFAULT '1' COMMENT '状态。可选值:1(正常),2(删除)',
  `sort_order` int(4) DEFAULT NULL COMMENT '排列序号,表示同级类目的展现次序,如数值相等则按名称次序排列。取值范围:大于零的整数',
  `is_parent` tinyint(1) DEFAULT '1' COMMENT '该类目是否为父类目,1为true,0为false',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`,`status`) USING BTREE,
  KEY `sort_order` (`sort_order`)
) ENGINE=InnoDB AUTO_INCREMENT=1183 DEFAULT CHARSET=utf8 COMMENT='课程类目';

课程详情表 ( ecourses_item_desc )

课程详情表主要用于保存系统中课程详情的信息,主要字段包括:课程 ID、课程描述、创建时间、更新时间。

建表 SQL 语句

CREATE TABLE `ecourses_item_desc` (
  `item_id` bigint(20) NOT NULL COMMENT '课程ID',
  `item_desc` text COMMENT '课程描述',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='课程描述表';

课程规则参数表 ( ecourses_item_param )

课程规则参数表主要用于保存系统中课程规则参数的信息,主要字段包括:课程规则参数 ID、课程类目 ID、参数数据、创建时间、更新时间。

建表 SQL 语句

CREATE TABLE `ecourses_item_param` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `item_cat_id` bigint(20) DEFAULT NULL COMMENT '课程类目ID',
  `param_data` text COMMENT '参数数据,格式为json格式',
  `created` datetime DEFAULT NULL,
  `updated` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `item_cat_id` (`item_cat_id`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8 COMMENT='课程规则参数';

课程规格课程关系表 ( ecourses_item_param_item )

课程规格课程关系表主要用于保存系统中课程规格与课程关系的信息,主要字段包括:课程规格课程关系表 ID、课程 ID、参数数据、创建时间、更新时间。

建表 SQL 语句

CREATE TABLE `ecourses_item_param_item` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `item_id` bigint(20) DEFAULT NULL COMMENT '课程ID',
  `param_data` text COMMENT '参数数据,格式为json格式',
  `created` datetime DEFAULT NULL,
  `updated` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `item_id` (`item_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='课程规格和课程的关系表';

订单表 ( ecourses_order )

订单表主要用于保存系统中订单的信息,主要字段包括:订单 ID、实付金额、支付类型、邮费、状态、订单创建时间、订单更新时间、付款时间、发货时间、交易完成时间、交易关闭时间、物流/云盘服务商、物流单号/云盘地址、用户 ID、用户账号。

建表 SQL 语句

CREATE TABLE `ecourses_order` (
  `order_id` varchar(50) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '订单id',
  `payment` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '实付金额。精确到2位小数;单位:元。如:200.07,表示:200元7分',
  `payment_type` int(2) DEFAULT NULL COMMENT '支付类型,1、在线支付,2、货到付款',
  `post_fee` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '邮费。精确到2位小数;单位:元。如:200.07,表示:200元7分',
  `status` int(10) DEFAULT NULL COMMENT '状态:1、未付款,2、已付款,3、未发货,4、已发货,5、交易成功,6、交易关闭',
  `create_time` datetime DEFAULT NULL COMMENT '订单创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '订单更新时间',
  `payment_time` datetime DEFAULT NULL COMMENT '付款时间',
  `consign_time` datetime DEFAULT NULL COMMENT '发货时间',
  `end_time` datetime DEFAULT NULL COMMENT '交易完成时间',
  `close_time` datetime DEFAULT NULL COMMENT '交易关闭时间',
  `shipping_name` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '物流名称',
  `shipping_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '物流单号',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
  `buyer_message` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '买家留言',
  `buyer_nick` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '买家昵称',
  `buyer_rate` int(2) DEFAULT NULL COMMENT '买家是否已经评价',
  PRIMARY KEY (`order_id`),
  KEY `create_time` (`create_time`),
  KEY `buyer_nick` (`buyer_nick`),
  KEY `status` (`status`),
  KEY `payment_type` (`payment_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

订单与课程关系表 ( ecourses_order_item )

订单与课程关系表主要用于保存系统中订单与课程关系的信息,主要字段包括:订单与课程关系表 ID、课程 ID、订单 ID、报名人数、课程标题、课程价格、课程总金额、图片地址。

建表 SQL 语句

CREATE TABLE `ecourses_order_item` (
  `id` varchar(20) COLLATE utf8_bin NOT NULL,
  `item_id` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '课程id',
  `order_id` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '订单id',
  `num` int(10) DEFAULT NULL COMMENT '课程报名数量',
  `title` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '课程标题',
  `price` bigint(50) DEFAULT NULL COMMENT '课程价格',
  `total_fee` bigint(50) DEFAULT NULL COMMENT '课程总金额',
  `pic_path` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '课程图片地址',
  PRIMARY KEY (`id`),
  KEY `item_id` (`item_id`),
  KEY `order_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

用户收货信息表 ( ecourses_order_shipping )

用户收货信息表主要用于保存系统中用户收货的信息,主要字段包括:订单 ID、收货人姓名、固定电话、手机号码、省份、城市、区/县、收货地址、邮政编码、创建时间、更新时间。

建表 SQL 语句

CREATE TABLE `ecourses_order_shipping` (
  `order_id` varchar(50) NOT NULL COMMENT '订单ID',
  `receiver_name` varchar(20) DEFAULT NULL COMMENT '收货人全名',
  `receiver_phone` varchar(20) DEFAULT NULL COMMENT '固定电话',
  `receiver_mobile` varchar(30) DEFAULT NULL COMMENT '移动电话',
  `receiver_state` varchar(10) DEFAULT NULL COMMENT '省份',
  `receiver_city` varchar(10) DEFAULT NULL COMMENT '城市',
  `receiver_district` varchar(20) DEFAULT NULL COMMENT '区/县',
  `receiver_address` varchar(200) DEFAULT NULL COMMENT '收货地址,如:xx路xx号',
  `receiver_zip` varchar(6) DEFAULT NULL COMMENT '邮政编码,如:310001',
  `created` datetime DEFAULT NULL,
  `updated` datetime DEFAULT NULL,
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

##