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/...

相关推荐
招风的黑耳5 分钟前
Java集合框架详解与使用场景示例
java·开发语言
xrkhy6 分钟前
java中XML的使用
xml·java·开发语言
胡斌附体16 分钟前
idea挂掉,会导致进程不结束,切换profile环境,导致token认证不通过
java·ide·intellij-idea·调试·token失效
y102121041 小时前
Pyhton训练营打卡Day27
java·开发语言·数据结构
AA-代码批发V哥1 小时前
Java类一文分解:JavaBean,工具类,测试类的深度剖析
java·开发语言
等等5431 小时前
Java EE初阶——线程安全
java·java-ee
薯条不要番茄酱1 小时前
【SpringBoot】从零开始全面解析SpringMVC (二)
java·spring boot·后端
zhougl9961 小时前
OkHttp用法-Java调用http服务
java·http·okhttp
小林学习编程1 小时前
Springboot考研信息平台
spring boot·后端·考研
Hygge-star2 小时前
【数据结构】二分查找-LeftRightmost
java·数据结构·算法