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

news2025/1/16 6:07:55

上一章文章 我们做了音乐播放器 这个项目一些公共封装的一些工具类。参考网址:
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 写出来一个音乐播放器项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2277396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode刷题记录(五十四)——560. 和为 K 的子数组

(一)问题描述 560. 和为 K 的子数组 - 力扣(LeetCode)560. 和为 K 的子数组 - 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。子数组是数组中元素的连续非空序列。 示例 1&am…

软考,质量管理。

项目质量管理,PMBOOK 质量是满足需求的能力的特性的总结 需求的满足程度 质量通常是指产品的质量,广义上的质量还包括工作质量。产品质量是指产品的使用价值及其属性;而工作质量则是产品质量的保证,它反映了与产品质量直接有关的…

Re78 读论文:GPT-4 Technical Report

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:GPT-4 Technical Report 官方博客:GPT-4 | OpenAI appendix懒得看了。 文章目录 1. 模型训练过程心得2. scaling law3. 实验结果减少风险 1. 模型训练过程心得 模型结构还…

LeetCode | 图文详细描述动态规划DP算法及经典题型

本文将用简单直白的方式,从零开始带你掌握动态规划的精髓。你会发现: 动态规划其实没那么难——它就是递归的“记性”版。状态转移方程不再玄学——从题目思路到实现,手把手教你推导。经典题型剖析——从“爬楼梯”到“背包问题”&#xff0…

学习threejs,使用RollControls相机控制器

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.RollControls 相机控…

期权懂|场内期权合约行权价格是如何设定制度的?

锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 场内期权合约行权价格是如何设定制度的? 场内期权合约的行权价格是期权合约中的一个关键要素,它决定了期权买方在期权到期日或之前买入(对于…

设计模式相关面试

设计模式 工厂方法模式 简单工程模式 工厂方法设计模式 抽象工厂设计模式 工厂方法小结 策略模式 案例(工厂模式策略模式) 责任链设计模式 概述 常见使用方式 常见技术场景 单点登录如何实现 权限认证如何实现 上传数据的安全如何控制 遇到了那些比较棘…

C#轻松实现ModbusTCP服务器接口

大家好!我是付工。 通透!终于把ModbusRTU弄明白了 这样看来,ModbusTCP协议太简单了 太简单了!C#轻松实现Modbus通信 前面给大家介绍了一系列关于Modbus和ModbusTCP的知识,主要针对的是ModbusTCP客户端。 在实际开…

比较之舞,优雅演绎排序算法的智美篇章

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、冒泡排序:数据海…

mysql-5.7.18保姆级详细安装教程

本文主要讲解如何安装mysql-5.7.18数据库: 将绿色版安装包mysql-5.7.18-winx64解压后目录中内容如下图,该例是安装在D盘根目录。 在mysql安装目录中新建my.ini文件,文件内容及各配置项内容如下图,需要先将配置项【skip-grant-tab…

2025年华数杯国际赛B题论文首发+代码开源 数据分享+代码运行教学

176项指标数据库 任意组合 千种组合方式 14页纯图 无水印可视化 63页无附录正文 3万字 1、为了方便大家阅读,全文使用中文进行描述,最终版本需自行翻译为英文。 2、文中图形、结论文字描述均为ai写作,可自行将自己的结果发给ai&#xff0c…

unity学习17:unity里的旋转学习,欧拉角,四元数等

目录 1 三维空间里的旋转与欧拉角,四元数 1.1 欧拉角比较符合直观 1.2 四元数 1.3 下面是欧拉角和四元数的一些参考文章 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 2.2 使用quaternion四元数,w,x,y,z 2.3 使用quaternion四元数,类 Vector3.zero 这种…

深度剖析RabbitMQ:从基础组件到管理页面详解

文章目录 一、简介二、Overview2.1 Overview->Totals2.2 Overview->Nodesbroker的属性2.3 Overview->Churn statistics2.4 Overview->Ports and contexts2.5 Overview->Export definitions2.6 Overview->Import definitions 三、Connections连接的属性 四、C…

机器学习中的凸函数和梯度下降法

一、凸函数 在机器学习中,凸函数 和 凸优化 是优化问题中的重要概念,许多机器学习算法的目标是优化一个凸函数。这些概念的核心思想围绕着优化问题的简化和求解效率。下面从简单直观的角度来解释。 1. 什么是凸函数? 数学定义 一个函数 f…

使用 WPF 和 C# 绘制覆盖网格的 3D 表面

此示例展示了如何使用 C# 代码和 XAML 绘制覆盖有网格的 3D 表面。示例使用 WPF 和 C# 将纹理应用于三角形展示了如何将纹理应用于三角形。此示例只是使用该技术将包含大网格的位图应用于表面。 在类级别,程序使用以下代码来定义将点的 X 和 Z 坐标映射到 0.0 - 1.…

深入Android架构(从线程到AIDL)_32 JNI架构原理_Java与C的对接05

1、EIT造形观点 基于熟悉的EIT造形&#xff0c;很容易理解重要的架构设计决策议题。 前言 2、混合式EIT造形 一般EIT造形是同语言的。也就是<E>、 <I>和<T>都使用同一种语言撰写的&#xff0c;例如上述的Java、 C/C等。于此&#xff0c;将介绍一个EIT造…

数字普惠金融对新质生产力的影响研究(2015-2023年)

基于2015—2023年中国制造业上市公司数据&#xff0c;探讨了数字普惠金融对制造业企业新质生产力的影响及作用机理。研究发现&#xff0c;数字普惠金融有助于促进制造业企业新质生产力的发展&#xff0c;尤其是在数字普惠金融的使用深度较大的情况下&#xff0c;其对新质生产力…

装备制造业:建立项目“四算”管理:以合同为源头,以项目为手段实现合同的测算、预算、核算与决算的管控体系

尊敬的各位管理层&#xff1a; 大家好&#xff01;作为装备制造业的 CFO&#xff0c;我今天要向大家汇报的是如何建立项目“四算”管理&#xff0c;即以合同为源头&#xff0c;以项目为手段实现合同的测算、预算、核算与决算的管控体系。在当前市场竞争激烈、成本压力不断增大…

自建RustDesk服务器

RustDesk服务端 下面的截图是我本地的一个服务器做为演示用&#xff0c;你自行的搭建服务需要该服务器有固定的ip地址 1、通过宝塔面板快速安装 2、点击【安装】后会有一个配置信息&#xff0c;默认即可 3、点击【确认】后会自动安装等待安装完成 4、安装完成后点击【打开…

前端实现doc文件预览的三种方式

文章目录 1、docx-preview 实现&#xff08;推荐&#xff09;2、vue-office 实现3、mammoth 实现&#xff08;不推荐&#xff09; 需求&#xff1a;有一个docx文件&#xff0c;需要按其本身的格式&#xff0c;将内容展示出来&#xff0c;即&#xff1a;实现doc文件预览。 本文…