数据库大作业——音乐平台数据库管理系统

W...Y的主页😊
代码仓库分享💕
《数据库系统》课程设计 :流行音乐管理平台数据库系统(本数据库大作业使用软件sql server、dreamweaver、power designer)
目录
系统需求设计
数据库概念结构设计
实体分析
属性分析
联系分析
概念模型分析(CDM图)
数据库逻辑结构设计
逻辑模型设计(LDM图)
数据库物理结构设计
表设计
创建表和完整性约束代码设计
创建物理模型设计图(PDM)
编辑
数据库功能实现及界面展示
页面设计展示
总结与展望
总结
展望
系统需求设计
1.需求概念:
音乐管理系统是一个为用户提供方便、快捷、高效的音乐平台,可以让用户可
以随时随地享受音乐,发现新的音乐,分享自己的音乐喜好,增强音乐的社交
属性。
用户管理:用户可以注册、登录、修改个人信息、注销账号等;
歌单管理:用户可以创建、编辑、删除自己的歌单,可以将音乐添加到歌单中,
可以查看、收藏其他用户的歌单,可以分享自己的歌单到社交媒体等;
收藏管理:用户可以收藏自己喜欢的音乐、歌单、歌手等,可以查看、取消收
藏、管理自己的收藏夹;
音乐管理:系统可以存储音乐的各种信息,包括歌曲、专辑、歌手、流派,歌
词等。可以查询音乐的歌词,播放地址等;
评论管理:用户可以评论别人的歌曲,歌单,可以查看自己的评论,删除自己
的评论。
业务流程图:
1.系统功能结构图 :

2.业务流程图:
业务分为注册登录、用户收藏、评论、歌单和歌曲。 
用户规则:用户必须注册并登录才能使用系统的功能,用户可以修改自己的个人信息,可以注销自己的账号,但不能恢复已注销的账号,用户可以给系统提供反馈信息,系统会根据用户的反馈信息改进服务质量;
收藏规则:收藏必须有一个唯一的 id,系统不会存储或展示重复的收藏,收藏必须有一个对象,系统会记录收藏的对象和收藏的时间,收藏除了 id 与收藏名其他都可以为空;
评论规则:每个评论都会有 1 个唯一的 id,系统不会存储 id 重复的评论,评论只限于歌曲与歌单。
3.数据流分析
顶层数据流程图:
第一层数据流程图:

第二层数据流图:
4.数据字典
数据文件名称:用户信息
说明:系统中的注册用户,可以进行登录、浏览、评论、收藏等操作
数据文件组成:用户姓名、ID、年龄、邮箱、性别、密码、电话
数据处理:
用户登录:用户通过输入用户名和密码进行系统登录。
浏览音乐:用户浏览系统中的音乐库。
添加评论:用户对音乐或歌单发表评论。
收藏音乐/歌单:用户将喜欢的音乐或歌单添加到个人收藏。
创建歌单:用户创建一个新的歌单并可以添加音乐。
数据文件名称:音乐
说明:系统中的音频文件,是用户互动的核心对象
数据文件组成:名称、ID、演奏者、风格、收藏量、播放量
数据处理:
音乐上传与审核:音乐文件被上传并审核。
音乐分类与存储:审核通过的音乐被分类并存储。
音乐检索与播放:用户检索并播放音乐。
音乐评论:用户对音乐发表评论。
音乐收藏:用户将音乐添加到个人收藏。
数据库概念结构设计
实体分析
本系统拥有5个实体,分别为1个使用者和4个被操作者
负责选择音乐、歌单、收藏、评论操作。
音乐的存放位置
该平台的主体属性
评论由用户产生或删除,对歌单或音乐进行操作
收藏
收藏由用户进行操作,具体是对歌单与音乐的操作实现
属性分析
1.用户属性
用户实体有七个属性:用户姓名、ID、年龄、邮箱、性别、密码、电话。ID为主码,确定是哪一位用户,邮箱、ID和密码用于管理员登录操作,姓名、性别、电话、年龄为管理员基本信息。

2.歌单属性
歌单实体有五个属性:创建者、创建时间、歌单ID、描述、名称。ID作为主码不可重复,用于确定歌单的唯一性、创建时间、创建者、描述和歌单名称都作为歌单的基本信息。
3.评论属性
评论拥有4个属性:ID、被评论用户、评论用户、评论内容。ID作为主码,作为评论唯一性信息,被评论用户与评论用户和内容作为评论的内容属性。

4.收藏实体属性
收藏实体拥有4个属性:收藏ID、收藏名字、收藏用户、收藏时间。ID为主码,收藏时间作为用户收藏的依据。收藏名字与用户作为收藏的基本信息。

5.音乐实体属性
音乐实体拥有6个属性:名称、ID、演奏者、风格、收藏量、播放量。ID为音乐的主码,名称演奏者、风格、收藏量和播放量为音乐的基本信息。

联系分析
用户_歌单:用户和歌单之间的联系集,表示用户可以创建、编辑、删除自己的歌单;
歌单_音乐:歌单和音乐之间的联系集,表示歌单可以包含一个或多个音乐,音乐可以属于一个或多个歌单,歌单的创建者可以将音乐添加到歌单中,也可以从歌单中移除音乐,歌单的内容和音乐的顺序可以被编辑;
用户_收藏:用户和收藏之间的联系集,表示用户可以收藏自己喜欢的音乐、歌单、歌手等,也可以查看、取消收藏、管理自己的收藏夹 ;
收藏_音乐:收藏和音乐的联系集,表示一首歌可以被一个或多收藏夹收藏,一个收藏夹可以收藏一个或多个音乐,用户可以向收藏夹中增添、删除音乐;
收藏_歌单:收藏和歌单的联系集,表示一个歌单可以被一个或多收藏夹收藏,一个收藏夹可以收藏一个或多个歌单,用户可以向收藏夹中增添、删除歌单;
评论_音乐:评论音乐的联系集,表示一首歌可以拥有多个评论,但同一个评论只能属于一首歌,用户可以自己添加、删除评论;
评论_歌单:评论歌单的联系集,表示一个歌单可以拥有多个评论,但同一个评论只能属于一歌单,用户可以自己添加、删除评论。
E-R图:
根据前面的实体属性图和联系分析画出整个系统的E-R图,具体的E-R图如图13。各实体的属性分别如下:
用户:{用户姓名、ID、年龄、邮箱、性别、密码、电话}
歌单:{创建者、创建时间、歌单ID、描述、名称}
评论:{ 评论ID、被评论用户、评论用户、评论内容}
收藏:{收藏ID、收藏名字、收藏用户、收藏时间}
音乐:{名称、ID、演奏者、风格、收藏量、播放量}
关系模型:
将E-R图中12个实体和联系转换为以下关系模型,该关系模型由5个关系模式组成:
用户:{用户姓名、ID、年龄、邮箱、性别、密码、电话}
歌单:{创建者、创建时间、歌单ID、描述、名称}
评论:{ 评论ID、被评论用户、评论用户、评论内容}
收藏:{收藏ID、收藏名字、收藏用户、收藏时间、歌单ID 音乐ID }
音乐:{音乐ID、演奏者、风格、收藏量、播放量}
概念模型分析(CDM图)
根据E-R 图画出CDM图:
数据库逻辑结构设计
概念模型转化为逻辑模型
一对一关系的转化
无
一对多关系的转化
一个用户可以创建多个歌单
一个歌单可以拥有多个评论
一首音乐可以拥有多个评论
一个用户可以对多个收藏进行管理
一个收藏中可以存在多个歌单,一个歌单可以被多个收藏添加
一个收藏可以收藏多个音乐,多个音乐可以被一个收藏所收藏
一个歌单中可以有多个音乐,一个音乐可以再多个收藏中
逻辑模型设计(LDM图)

数据库物理结构设计
表设计
用户表:

收藏表:

评论表
歌单表

音乐表
创建表和完整性约束代码设计
创建用户表
create table 用户 (user_id int not null,user_name char(50) null,user_password char(20) null,user_email char(50) null,user_phone char(20) null,user_nickname char(20) null,user_sex char(30) null,user_age char(25) null,constraint PK_用户 primary key nonclustered (user_id)
)
Go
创建评论表
create table 评论 (con_id char(10) not null,con_user char(10) null,con_content char(10) null,con_it_id char(10) null,constraint PK_评论 primary key nonclustered (con_id)
)
go
创建收藏表
create table 收藏 (collect_id char(30) not null,collect_user_id char(30) null,collect_time char(30) null,collect_name char(30) null,constraint PK_收藏 primary key nonclustered (collect_id)
)
go
创建歌单表
create table 歌单 (playlist_id int not null,playlist_name char(20) null,playlist_time char(20) null,playlist_user_id char(20) null,playlist_description char(20) null,constraint PK_歌单 primary key nonclustered (playlist_id)
)
Go
创建音乐表
create table 音乐 (music_id int not null,music_name char(20) null,music_singer char(20) null,music_type char(20) null,music_count char(20) null,music_collect char(20) null,constraint PK_音乐 primary key nonclustered (music_id)
)
go
添加外键
if exists (select 1from sysindexeswhere id = object_id('创建')and name = '创建2_FK'and indid > 0and indid < 255)drop index 创建.创建2_FK
goif exists (select 1from sysindexeswhere id = object_id('创建')and name = '创建_FK'and indid > 0and indid < 255)drop index 创建.创建_FK
goif exists (select 1from sysobjectswhere id = object_id('创建')and type = 'U')drop table 创建
goif exists (select 1from sysobjectswhere id = object_id('收藏')and type = 'U')drop table 收藏
goif exists (select 1from sysindexeswhere id = object_id('收藏音乐')and name = '收藏音乐2_FK'and indid > 0and indid < 255)drop index 收藏音乐.收藏音乐2_FK
goif exists (select 1from sysindexeswhere id = object_id('收藏音乐')and name = '收藏音乐_FK'and indid > 0and indid < 255)drop index 收藏音乐.收藏音乐_FK
goif exists (select 1from sysobjectswhere id = object_id('收藏音乐')and type = 'U')drop table 收藏音乐
goif exists (select 1from sysobjectswhere id = object_id('歌单')and type = 'U')drop table 歌单
goif exists (select 1from sysindexeswhere id = object_id('添加')and name = '添加2_FK'and indid > 0and indid < 255)drop index 添加.添加2_FK
goif exists (select 1from sysindexeswhere id = object_id('添加')and name = '添加_FK'and indid > 0and indid < 255)drop index 添加.添加_FK
goif exists (select 1from sysobjectswhere id = object_id('添加')and type = 'U')drop table 添加
goif exists (select 1from sysindexeswhere id = object_id('添加歌单')and name = '添加歌单2_FK'and indid > 0and indid < 255)drop index 添加歌单.添加歌单2_FK
goif exists (select 1from sysindexeswhere id = object_id('添加歌单')and name = '添加歌单_FK'and indid > 0and indid < 255)drop index 添加歌单.添加歌单_FK
goif exists (select 1from sysobjectswhere id = object_id('添加歌单')and type = 'U')drop table 添加歌单
goif exists (select 1from sysobjectswhere id = object_id('用户')and type = 'U')drop table 用户
goif exists (select 1from sysobjectswhere id = object_id('评论')and type = 'U')drop table 评论
goif exists (select 1from sysindexeswhere id = object_id('评论歌单')and name = '评论歌单2_FK'and indid > 0and indid < 255)drop index 评论歌单.评论歌单2_FK
goif exists (select 1from sysindexeswhere id = object_id('评论歌单')and name = '评论歌单_FK'and indid > 0and indid < 255)drop index 评论歌单.评论歌单_FK
goif exists (select 1from sysobjectswhere id = object_id('评论歌单')and type = 'U')drop table 评论歌单
goif exists (select 1from sysindexeswhere id = object_id('评论音乐')and name = '评论音乐2_FK'and indid > 0and indid < 255)drop index 评论音乐.评论音乐2_FK
goif exists (select 1from sysindexeswhere id = object_id('评论音乐')and name = '评论音乐_FK'and indid > 0and indid < 255)drop index 评论音乐.评论音乐_FK
goif exists (select 1from sysobjectswhere id = object_id('评论音乐')and type = 'U')drop table 评论音乐
goif exists (select 1from sysobjectswhere id = object_id('音乐')and type = 'U')drop table 音乐
go
创建物理模型设计图(PDM)
数据库功能实现及界面展示
页面设计展示
1.用户首页设计
用户首页包含五个功能按钮,分别是用户信息、歌单、歌曲、收藏、评论这五个功能。分别用于这五个实体的增删查改

2.登录页面设计
登录界面是我们想要登录流行音乐管理系统平台,其中需要用户的ID和其设定的密码进行,如果不能登录就不能进入用户首页,更不能修改自己的任何内容。

3.修改插入删除设计
我们以用户的修改插入删除作为示例,剩下都一样。




总结与展望
总结
在项目的完成阶段,我们首先回顾了我们设定的目标,并确认我们已经成功实现了流行音乐管理平台的核心功能,包括艺人资料管理、音乐作品上传和管理、专辑与歌曲检索、音乐风格分类等。我们选择了适当的技术栈,确保系统具有高效性、稳定性和可扩展性,并通过充分的测试和调试来验证系统的稳定性和功能完整性。同时,我们也注重了用户体验和安全性,确保用户能够安全、便捷地使用平台,并保护用户的隐私数据。
展望
在展望方面,我们计划进一步扩展平台的功能,例如增加音乐推荐系统、社交功能、直播演出等,以提升用户体验和吸引更多用户。我们也将努力实现平台的跨平台支持,使用户可以在不同的设备和操作系统上使用平台,并利用数据分析和挖掘技术深入了解用户的偏好和行为,为用户提供个性化的服务和推荐。此外,我们还计划与其他音乐平台、唱片公司、艺人及其经纪人建立合作伙伴关系,共同推广和发展平台,扩大用户基础和音乐资源。最后,我们将定期更新和维护系统,跟踪最新的技术发展,确保系统始终保持高效、安全和稳定。
以上就是本次博客的全部内容,内容仅供参考,不要全部模仿!!!感谢大家观看。
相关文章:
数据库大作业——音乐平台数据库管理系统
W...Y的主页😊 代码仓库分享💕 《数据库系统》课程设计 :流行音乐管理平台数据库系统(本数据库大作业使用软件sql server、dreamweaver、power designer) 目录 系统需求设计 数据库概念结构设计 实体分析 属性分…...
【DBA早下班系列】—— 并行SQL/慢SQL 问题该如何高效收集诊断信息
1. 前言 OceanBase论坛问答区或者提交工单支持的时候大部分时间都浪费在了诊断信息的获取交互上,今天我就其中大家比较头疼的SQL问题,给大家讲解一下如何一键收集并行SQL/慢SQL所需要的诊断信息,减少沟通成本,让大家早下班。 2. …...
用python实现多文件多文本替换功能
用python实现多文件多文本替换功能 今天修改单位项目代码时由于改变了一个数据结构名称,结果有几十个文件都要修改,一个个改实在太麻烦,又没有搜到比较靠谱的工具软件,于是干脆用python手撸了一个小工具,发现python在…...
【DevOps】深入探索Ubuntu操作系统:全面了解
引言 在开源软件的世界里,Ubuntu是一个闪耀的明星。它不仅是一个操作系统,更是一种社区精神、一种共享和协作的文化。Ubuntu操作系统基于强大的Linux内核,由世界各地的开发者共同维护和改进。在这篇博文中,我们将深入探索Ubuntu操…...
【Linux】—MySQL安装
文章目录 前言一、下载官方MySQL包二、下载完成后,通过xftp6上传到Linux服务器上三、解压MySQL安装包四、在安装目录下执行rpm安装,请按顺序依次执行。五、配置MySQL六、启动MySQL数据库七、退出,重新登录数据库 前言 本文主要介绍在Linux环境…...
【vue】form表单提交validate验证不进valid原因
目录 1. 原因 1. 原因 1.<el-form>是否写了ref“form”。2.是否有其它标签写了ref“form”。3.<el-form>中要写成:model,不能使用v-model。4.自定义的validate要各个路径均能返回callback()。 const validatePass (rule, value, callback) > {if (…...
如何用 Google Chrome 浏览器浏览经过 XSLT 渲染的 XML 文件
对于经过XSLT渲染的XML文件,本来,可以直接用 IE (Internet Explorer) 打开,就能看到渲染之后的样子,很方便。但是后来,微软把 IE 换成了 Microsoft Edge,按理说这是比 IE 更先进的浏览器,可是偏…...
Python学习笔记12:进阶篇(二),类的继承与组合
类的继承 我们在编写一系列的类的时候,会发现这些类很相似,但是又有各自的特点和行为。在编写这些类的时候,我们可以把相同的部分抽象成一个基类,然后根据其他不同的特点和行为,抽象出子类,继承这个基类。…...
npm install cnpm -g 报错4048
npm install cnpm -g 报错4048 设置淘宝镜像: 报错如下: 其他博主提供的方法都尝试了,比如管理员权限打开终端,删除.npmrc文件,清除缓存npm cache clean -f等都试了无效,最后怀疑是npm和cnpm版本不对应&…...
本地快速部署 SuperSonic
本地快速部署 SuperSonic 0. 引言1. 本地快速部署 supersonic2. 访问 supersonic3. 支持的数据库4. github 地址 0. 引言 SuperSonic融合Chat BI(powered by LLM)和Headless BI(powered by 语义层)打造新一代的BI平台。这种融合确…...
如何给vue开发的网站做seo?
最近公司有个需求,需要给公司的官网sqlynx做seo,但因为各种历史原因吧,原来的网站是用vue开发的。没办法,只能尝试尽量做一些seo,让网站能更好一些。 目录 1. 服务器端渲染(SSR) 2. 预渲染&am…...
算法训练营第六十天(延长12天添加图论) | LeetCode 647 回文子串、LeetCode 516 最长回文子序列
LeetCode 67 回文子串 思路很简单,每一个dp[i]等于dp[i-1]加上当前字符向前直到0各个长度字符串回文串个数即可 代码如下: class Solution {public boolean isValid(String s) {int l 0, r s.length() - 1;while (l < r) {if (s.charAt(l) ! s.ch…...
TikTok账号养号的流程分享
对于很多刚开始运营TikTok的新手小白来说,都会有一个同样的疑问,那就是:TikTok到底需不需要养号?这里明确告诉大家是需要养号的,今天就把我自己实操过的养号经验和策略总结出来,分享给大家。 一、什么是Ti…...
C++初学者指南第一步---6.枚举和枚举类
C初学者指南第一步—6.枚举和枚举类 文章目录 C初学者指南第一步---6.枚举和枚举类1.作用域的枚举(enum class类型)(C11)2.无作用域的枚举(enum类型)3.枚举类的基础类型4.自定义枚举类映射5.和基础类型的互相转换 1.作用域的枚举(enum class类…...
【js判断机型】
var isIOS /(iPhone|iPad|iPod)/i.test(navigator.userAgent) var isiPad navigator.userAgent.match(/(iPad)/) || (navigator.platform ‘MacIntel’ && navigator.maxTouchPoints > 1) 上面这个不行的话,再试下这个 var isiPad (navigator.userAg…...
google chrome浏览器安装crx插件Jam
先上一张图: Jam是bug报告生成插件 1、在地址栏中输入chrome://extensions/,然后回车。 2、将下载好的crx插件,直接拖到里面就可以完成安装工作了。 3、测试了一下jam插件,发现直接没有响应。 4、点击【移除】直接可以删除插件…...
【Java面试】二十、JVM篇(上):JVM结构
文章目录 1、JVM2、程序计数器3、堆4、栈4.1 垃圾回收是否涉及栈内存4.2 栈内存分配越大越好吗4.3 方法内的局部变量是否线程安全吗4.4 栈内存溢出的情况4.5 堆和栈的区别是什么 5、方法区5.1 常量池5.2 运行时常量池 6、直接内存 1、JVM Java源码编译成class字节码后…...
【Python教程】压缩PDF文件大小
压缩 PDF 文件能有效减小文件大小并提高文件传输的效率,同时还能节省计算机存储空间。除了使用一些专业工具对PDF文件进行压缩,我们还可以通过 Python 来执行该操作,实现自动化、批量处理PDF文件。 本文将分享一个简单有效的使用 Python 压缩…...
UE4中性能优化和检测工具
UE4中性能优化和检测工具合集 简述CPUUnreal InsightUnreal ProfilerSimpleperfAndroid StudioPerfettoXCode TimeprofilerBest Practice GPUAdreno GPUMali GPUAndroid GPU Inspector (AGI) 内存堆内存分析Android StudioLoliProfilerUE5 Memory InsightsUnity Mono 内存Memre…...
大型ERP设计-业务与功能指引:外币折算与辅助账套
外币折算与辅助账套 前言:在对ORACLE和SAP的核心模块功能全面解读的基础上,给出大型ERP设计的建议-业务与功能指引,企业选型、开发大型ERP软件的公司和ERP顾问可以参考。模块包括财务、计划与制造、供应链、项目及设备(MRO),初步预…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

关系模型: