SpringBoot+vue仿网易云音乐网站(二)-数据库设计

SpringBoot+vue仿网易云音乐网站(二)-数据库设计,第1张

SpringBoot+vue仿网易云音乐网站(二)-数据库设计 一、需求分析

仿网易云,那么需求的话就照着网易云音乐来做了。
首先可以听歌,可以查看歌手,歌手又有对应的专辑,有用户,用户可以新建歌单,收藏歌单,歌单可以增删歌曲,用户还可以评论歌曲、专辑、歌单,还有粉丝功能,首页还有一个轮播图等…。

二、数据库设计详解

综合需求可以得出,共有以下11张表。
1). 歌曲表
2). 歌手表
3). 专辑表
4). 歌单表
5). 歌单歌曲表
6). 用户表
7). 用户收藏歌曲表
8). 用户收藏歌单表
9). 粉丝表
10). 评论表
11). 轮播图表

下面对每一张表做详细介绍

1. 歌曲表
DROP TABLE IF EXISTS `song`;
CREATE TABLE `song` (
  `song_id` int(11) NOT NULL auto_increment COMMENT '主键id',
  `song_name` varchar(255) NOT NULL COMMENT '歌曲名称',
  `song_singer` int(11) default NULL COMMENT '歌手Id',
  `song_filepath` varchar(100) default NULL COMMENT '歌曲路径',
  `song_album` int(11) default NULL COMMENT '专辑Id',
  `song_lyc` varchar(3000) default NULL, '歌词'
  PRIMARY KEY  (`song_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. 歌手表
DROP TABLE IF EXISTS `singer`;
CREATE TABLE `singer` (
  `singer_id` int(11) NOT NULL auto_increment,
  `singer_name` varchar(20) default NULL, '歌手名'
  `singer_details` varchar(255) default NULL, '歌手简介'
  `singer_photo` varchar(255) default NULL, '歌手头像'
  `singer_type` varchar(255) default NULL, '歌手类型'
  PRIMARY KEY  (`singer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

歌手类型是为了实现歌手页的分类的,华语男歌手、华语女歌手…等功能的。

3. 专辑表
DROP TABLE IF EXISTS `album`;
CREATE TABLE `album` (
  `album_id` int(11) NOT NULL auto_increment, 
  `album_name` varchar(255) default NULL, '专辑名字'
  `album_singer` int(11) default NULL, '歌手Id'
  `album_details` varchar(255) default NULL, '专辑介绍'
  `album_time` datetime default NULL, '专辑发行时间'
  `album_img` varchar(255) default NULL, '专辑封面'
  PRIMARY KEY  (`album_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

歌手、歌曲、专辑都是一对一,或者一对多的关系,就不需要建第三张表来关联了。

4. 歌单表
DROP TABLE IF EXISTS `lists`;
CREATE TABLE `lists` (
  `list_id` int(11) NOT NULL auto_increment,
  `list_title` varchar(255) default NULL, '歌单标题'
  `list_img` varchar(255) default NULL, '歌单封面'
  `list_userid` int(11) default NULL, '歌单创建者Id'
  `list_time` datetime default NULL, '歌单创建时间'
  `list_details` varchar(255) default NULL, '歌单简介'
  `list_type` int(11) default NULL, '歌单类型'
  `list_playnum` int(11) default NULL, '歌单点击量'
  PRIMARY KEY  (`list_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5. 歌单歌曲表

因为一首歌曲可以在多个歌单里,同时一个歌单可以包含多首歌曲,所以歌曲、歌单是多对多的关系,需要建第三张表来关联。

DROP TABLE IF EXISTS `songlist`;
CREATE TABLE `songlist` (
  `songlist_id` int(11) NOT NULL auto_increment,
  `songlist_listid` int(11) default NULL, '歌单Id'
  `songlist_songid` int(11) default NULL, '歌曲Id'
  PRIMARY KEY  (`songlist_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6. 用户表

手机号是因为我实现了手机号绑定,以及手机号登录。

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `user_id` int(11) NOT NULL auto_increment,
  `user_name` varchar(255) default NULL, '用户名'
  `account` varchar(255) default NULL, '用户账号'
  `password` varchar(255) default NULL, '用户密码'
  `user_phone` varchar(255) default NULL, '电话'
  `user_area` varchar(255) default NULL, '地区'
  `user_details` varchar(255) default NULL, '简介'
  `user_gender` int(11) default NULL, '性别'
  `user_birth` date default NULL, '生日'
  `user_photo` varchar(255) default NULL, '用户头像'
  PRIMARY KEY  (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
7. 用户收藏歌曲表

同样用户可以收藏多首歌曲,歌曲也可以被多个用户收藏,所以是多对多的关系,需要建第三张表关联。

DROP TABLE IF EXISTS `usersong`;
CREATE TABLE `usersong` (
  `usersong_id` int(11) NOT NULL auto_increment,
  `usersong_userid` int(11) default NULL, '用户id'
  `usersong_songid` int(11) default NULL, '歌曲id'
  PRIMARY KEY  (`usersong_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
8. 用户收藏歌单表

同样用户可以收藏多个歌单,歌单也可以被多个用户收藏,所以是多对多的关系,需要建第三张表关联。

DROP TABLE IF EXISTS `userlist`;
CREATE TABLE `userlist` (
  `userlist_id` int(11) NOT NULL auto_increment COMMENT '用户收藏歌单表',
  `userlist_userid` int(11) default NULL, '用户id'
  `userlist_listid` int(11) default NULL, '歌单id'
  PRIMARY KEY  (`userlist_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
9. 粉丝关注表

用户的关注可能有歌手,可能有用户,粉丝只可能有用户。

CREATE TABLE `fans` (
  `fans_id` int(11) NOT NULL auto_increment,
  `fans_type` int(11) default NULL, '类型,区分关注的是歌手还是用户'
  `fans_focusid` int(11) default NULL, '被关注者id,可能是歌手,也可能是用户'
  `fans_fansid` int(11) default NULL, '关注者id'
  PRIMARY KEY  (`fans_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
10. 评论表

用一个类型字段来区分是歌单、专辑,还是歌曲。

CREATE TABLE `comments` (
  `comm_id` int(11) NOT NULL auto_increment,
  `comm_details` varchar(255) default NULL, '评论内容'
  `comm_time` datetime default NULL, '评论时间'
  `comm_userid` int(11) default NULL, '用户Id'
  `comm_type` int(11) default NULL, '评论类型 1歌单2专辑3歌曲'
  `comm_targetid` int(11) default NULL, '目标id,可能是歌单id、专辑id、歌曲id'
  PRIMARY KEY  (`comm_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
11. 轮播图表

首页一般会轮流播放三四张,一般过期的可以失效掉,而不是直接删除。

CREATE TABLE `slide` (
  `slide_id` int(11) NOT NULL auto_increment,
  `slide_img` varchar(255) default NULL, '轮播图路径'
  `slide_albumid` int(11) default NULL, '专辑id'
  `slide_valid` int(11) default NULL, '是否有效'
  PRIMARY KEY  (`slide_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5636847.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存