4. 使用springboot做一个音乐播放器软件项目【数据库表的创建】

上一章文章 我们做了音乐播放器 这个项目一些公共封装的一些工具类。参考网址: juejin.cn/post/747369...

那么这篇文章 我们开始创建数据表。来存储我们项目中所需要存储的数据。

对于 我们这个项目 版本一 需要开发的核心功能 在 第一篇前期规划的文章中已经有过介绍了。

这篇文章 就简单的再整理一下

实现需求:

管理后台:

账号管理、专辑管理、歌手管理、歌曲管理

客户端:

首页、歌曲搜索、专辑列表、歌手列表、音乐播放、我喜欢的、个人中心、基础设置。

数据库版本: mysql8.0

针对以上版本,我们开始创建数据表。

这里 我不是采用的 Navicat 建表工具直接创建表

而是使用 一个 叫 flyway 的依赖工具 来创建表。 这样方便我们 后续开发完整后,迁移数据库部署。

对于这个 flyway 这个依赖 如果有小伙伴 不太会使用 可以参考 我这篇博客。 juejin.cn/post/744770...

这篇博客 有详细 介绍 怎么 在springboot项目中使用 flyway 。

我们所有的数据表 都创建在 这个文件夹下 。 前期 我们先简单的创建 6个数据表。后续如果有 新的需求 我们在慢慢 扩展数据表。

下面我直接分享 表结构

表1:账号表

less 复制代码
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:作者表

sql 复制代码
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:专辑表

sql 复制代码
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:歌曲表

less 复制代码
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:我喜欢的歌曲表

sql 复制代码
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 依赖 再前面分享的几篇文章也有提到过。

具体用法 可以参考 下面这个博客。 juejin.cn/post/745705...

less 复制代码
-- 这里使用的是 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 自动创建的 数据表。

好了 。对于这个 项目 今天 就分享到这里~ 下一章,我们就开始针对这些数据库 开始编写相对应的业务逻辑。接下来 对于业务逻辑 写起来就非常的快了~

完整版源代码👉www.wwwoop.com/home/Index/...

相关推荐
山猪打不过家猪1 小时前
ASP.NET Core Clean Architecture
java·数据库·asp.net
AllowM1 小时前
【LeetCode Hot100】除自身以外数组的乘积|左右乘积列表,Java实现!图解+代码,小白也能秒懂!
java·算法·leetcode
不会Hello World的小苗2 小时前
Java——列表(List)
java·python·list
二十七剑3 小时前
jvm中各个参数的理解
java·jvm
东阳马生架构4 小时前
JUC并发—9.并发安全集合四
java·juc并发·并发安全的集合
计算机小白一个4 小时前
蓝桥杯 Java B 组之岛屿数量、二叉树路径和(区分DFS与回溯)
java·数据结构·算法·蓝桥杯
孤雪心殇4 小时前
简单易懂,解析Go语言中的Map
开发语言·数据结构·后端·golang·go
菠菠萝宝5 小时前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru
不会Hello World的小苗5 小时前
Java——链表(LinkedList)
java·开发语言·链表
Allen Bright5 小时前
【Java基础-46.3】Java泛型通配符详解:解锁类型安全的灵活编程
java·开发语言