上一章文章 我们做了音乐播放器 这个项目一些公共封装的一些工具类。参考网址:
https://blog.csdn.net/Drug_/article/details/145093705
那么这篇文章 我们开始创建数据表。来存储我们项目中所需要存储的数据。
对于 我们这个项目 版本一 需要开发的核心功能 在 第一篇前期规划的文章中已经有过介绍了。
这篇文章 我就简单的再整理一下。
实现需求:
管理后台:
账号管理、专辑管理、歌手管理、歌曲管理
客户端:
首页、歌曲搜索、专辑列表、歌手列表、音乐播放、我喜欢的、个人中心、基础设置。
数据库版本: mysql8.0
针对以上版本,我们开始创建数据表。
这里 我不是采用的 Navicat 建表工具直接创建表
而是使用 一个 叫 flyway 的依赖工具 来创建表。 这样方便我们 后续开发完整后,迁移数据库部署。
对于这个 flyway 这个依赖 如果有小伙伴 不太会使用 可以参考 我这篇博客。
https://blog.csdn.net/Drug_/article/details/137600327
这篇博客 有详细 介绍 怎么 在springboot项目中使用 flyway 。
我们所有的数据表 都创建在 这个文件夹下 。 前期 我们先简单的创建 6个数据表。后续如果有 新的需求 我们在慢慢 扩展数据表。
下面我直接分享 表结构
表1:账号表
CREATE TABLE `mu_user`
(
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`is_deleted` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除',
`created_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`updated_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
`created_id` int(11) NOT NULL DEFAULT 0 COMMENT '创建用户id',
`updated_id` int(11) NOT NULL DEFAULT 0 COMMENT '更新用户id',
`username` varchar(100) NULL COMMENT '用户名',
`password` varchar(50) NULL COMMENT '密码',
`nickname` varchar(100) NULL COMMENT '昵称',
`avatar_url` varchar(255) NULL COMMENT '用户头像',
`is_super` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否是内置管理员',
PRIMARY KEY (`id`)
) COMMENT = '账号表';
INSERT INTO `mu_user` (`is_deleted`, `created_time`, `updated_time`, `created_id`, `updated_id`, `username`, `password`,
`nickname`, `avatar_url`, `is_super`)
VALUES (0, '2024-12-29 17:59:59', '2024-12-29 18:00:03', 0, 0, 'nwadmin', 'cf8d3876353ddf5d7459f56558042f4e', '小可爱',
NULL, 1);
表2:作者表
CREATE TABLE `mu_author`
(
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`is_deleted` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除',
`created_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`updated_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
`created_id` int(11) NOT NULL DEFAULT 0 COMMENT '创建用户id',
`updated_id` int(11) NOT NULL DEFAULT 0 COMMENT '更新用户id',
`author_name` varchar(100) NULL COMMENT '作者',
`cover_url` varchar(255) NULL COMMENT '作者封面',
PRIMARY KEY (`id`)
) COMMENT = '作者表';
表3:专辑表
CREATE TABLE `mu_album`
(
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`is_deleted` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除',
`created_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`updated_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
`created_id` int(11) NOT NULL DEFAULT 0 COMMENT '创建用户id',
`updated_id` int(11) NOT NULL DEFAULT 0 COMMENT '更新用户id',
`album_name` varchar(100) NULL COMMENT '专辑名称',
`album_cover_url` varchar(255) NULL COMMENT '专辑封面',
PRIMARY KEY (`id`)
) COMMENT = '专辑表';
表4:歌曲表
CREATE TABLE `mu_song`
(
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`is_deleted` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除',
`created_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`updated_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
`created_id` int(11) NOT NULL DEFAULT 0 COMMENT '创建用户id',
`updated_id` int(11) NOT NULL DEFAULT 0 COMMENT '更新用户id',
`song_name` varchar(100) NULL COMMENT '歌曲名称',
`author_name` varchar(100) NULL COMMENT '作者名称',
`album_name` varchar(100) NULL COMMENT '专辑名称',
`author_id` int(11) NOT NULL DEFAULT 0 COMMENT '作者名称',
`album_id` int(11) NOT NULL DEFAULT 0 COMMENT '专辑名称',
`song_cover_url` varchar(255) NULL COMMENT '歌曲封面',
`song_url` varchar(255) NULL COMMENT '歌曲的存储地址',
PRIMARY KEY (`id`)
) COMMENT = '歌曲表';
表5:我喜欢的歌曲表
CREATE TABLE `mu_user_liked_songs`
(
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`is_deleted` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除',
`created_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`updated_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
`created_id` int(11) NOT NULL DEFAULT 0 COMMENT '创建用户id',
`updated_id` int(11) NOT NULL DEFAULT 0 COMMENT '更新用户id',
`user_id` int NULL COMMENT '用户id',
`song_id` int NULL COMMENT '歌曲id',
PRIMARY KEY (`id`)
) COMMENT = '我喜欢的歌曲表';
表6: 文件存储表
对于表6 是 x-file-storage 这个 文件上传的依赖 带的表,使用这个依赖做文件上传会使用到下面的这个表结构 这个表结构是我从 x-file-storage 这个依赖的文档里复制过来的,这个x-file-storage 依赖 再前面分享的几篇文章也有提到过。
具体用法 可以参考 下面这个博客。
https://blog.csdn.net/Drug_/article/details/143402973
-- 这里使用的是 mysql
CREATE TABLE `file_detail`
(
`id` varchar(32) NOT NULL COMMENT '文件id',
`is_deleted` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除',
`created_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`updated_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
`created_id` int(11) NOT NULL DEFAULT 0 COMMENT '创建用户id',
`updated_id` int(11) NOT NULL DEFAULT 0 COMMENT '更新用户id',
`url` varchar(512) NOT NULL COMMENT '文件访问地址',
`size` bigint(20) DEFAULT NULL COMMENT '文件大小,单位字节',
`filename` varchar(256) DEFAULT NULL COMMENT '文件名称',
`original_filename` varchar(256) DEFAULT NULL COMMENT '原始文件名',
`base_path` varchar(256) DEFAULT NULL COMMENT '基础存储路径',
`path` varchar(256) DEFAULT NULL COMMENT '存储路径',
`ext` varchar(32) DEFAULT NULL COMMENT '文件扩展名',
`content_type` varchar(128) DEFAULT NULL COMMENT 'MIME类型',
`platform` varchar(32) DEFAULT NULL COMMENT '存储平台',
`th_url` varchar(512) DEFAULT NULL COMMENT '缩略图访问路径',
`th_filename` varchar(256) DEFAULT NULL COMMENT '缩略图名称',
`th_size` bigint(20) DEFAULT NULL COMMENT '缩略图大小,单位字节',
`th_content_type` varchar(128) DEFAULT NULL COMMENT '缩略图MIME类型',
`object_id` varchar(32) DEFAULT NULL COMMENT '文件所属对象id',
`object_type` varchar(32) DEFAULT NULL COMMENT '文件所属对象类型,例如用户头像,评价图片',
`metadata` text COMMENT '文件元数据',
`user_metadata` text COMMENT '文件用户元数据',
`th_metadata` text COMMENT '缩略图元数据',
`th_user_metadata` text COMMENT '缩略图用户元数据',
`attr` text COMMENT '附加属性',
`file_acl` varchar(32) DEFAULT NULL COMMENT '文件ACL',
`th_file_acl` varchar(32) DEFAULT NULL COMMENT '缩略图文件ACL',
`hash_info` text COMMENT '哈希信息',
`upload_id` varchar(128) DEFAULT NULL COMMENT '上传ID,仅在手动分片上传时使用',
`upload_status` int(11) DEFAULT NULL COMMENT '上传状态,仅在手动分片上传时使用,1:初始化完成,2:上传完成',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET = utf8 ROW_FORMAT = DYNAMIC COMMENT ='文件记录表';
CREATE TABLE `file_part_detail`
(
`id` varchar(32) NOT NULL COMMENT '分片id',
`is_deleted` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否删除',
`created_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`updated_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
`created_id` int(11) NOT NULL DEFAULT 0 COMMENT '创建用户id',
`updated_id` int(11) NOT NULL DEFAULT 0 COMMENT '更新用户id',
`platform` varchar(32) DEFAULT NULL COMMENT '存储平台',
`upload_id` varchar(128) DEFAULT NULL COMMENT '上传ID,仅在手动分片上传时使用',
`e_tag` varchar(255) DEFAULT NULL COMMENT '分片 ETag',
`part_number` int(11) DEFAULT NULL COMMENT '分片号。每一个上传的分片都有一个分片号,一般情况下取值范围是1~10000',
`part_size` bigint(20) DEFAULT NULL COMMENT '文件大小,单位字节',
`hash_info` text CHARACTER SET utf8 COMMENT '哈希信息',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT ='文件分片信息表,仅在手动分片上传时使用';
我们把这些 创建好的sql文件 放到 这个文件夹下后,当我们使用 idea 启动 springboot 项目时,这些sql文件会被自动执行。帮我们创建好我们需要的表。
这样后续我们如果 开发完整 需要部署到某个电脑上,我们就不用 迁移数据库了。直接把jar 放到电脑上启动后 会自动帮我们创建表 。这样就非常的方便了。
当然 后续我们加字段 加索引 都是通过这种方式来加。
每次重启服务 flyway 都会检测 有没有哪些sql文件没有执行过。
如果我们没有用这个工具:比如后续我们扩展了一个字段 我们通过 Navicat 直接 扩展字段,那么 我们本地数据库扩展一个。到了别的电脑上的数据库 还需要再扩展一下非常的不方便。但是有了这个 flyway 依赖 我们就不需要手动扩展了。每次重启服务,都会自动检测 这些sql 文件。
上面这些 就是我们通过 flyway 自动创建的 数据表。
好了 。对于这个 项目 今天 我就分享到这里。 下一章,我们就开始针对这些数据库 开始编写相对应的业务逻辑。接下来 对于业务逻辑 写起来就非常的快了。
说明:
因核心分享 的是java编程。后续文章中 基本分享的都是java语言的代码。
对于前端的代码,在文章中就不分享了。只会分享一下页面效果。
当然项目完结后,我会把前后端项目源码打包好放到最后一篇文章中。
如果有小伙伴有兴趣可以订阅此专栏,后续会持续更新直到音乐播放器这个软件完成。
我会尽可能详细的以文字的形式分享出来 从0到1 写出来一个音乐播放器项目。