网站设计ppt案例,服务器更改wordpress,查询企业的软件,国学大师网站谁做的目录 省流版word文档需求分析系统目标业务需求及处理流程功能需求及数据需求分析业务规则分析 概念设计命名规范实体集及属性联系集及属性系统总ER图 逻辑设计关系的设计关系的优化数据库基本表设计 物理设计关系模式存取方式选择数据库的存储结构 数据库应用设计数据库脚本数据… 目录 省流版word文档需求分析系统目标业务需求及处理流程功能需求及数据需求分析业务规则分析 概念设计命名规范实体集及属性联系集及属性系统总ER图 逻辑设计关系的设计关系的优化数据库基本表设计 物理设计关系模式存取方式选择数据库的存储结构 数据库应用设计数据库脚本数据库完整性设计数据库安全性设计存储过程和触发器设计 总结 省流版word文档
包含了设计报告与相关数据库sql各位可自取 链接连接 提取码2333
需求分析
系统目标
音乐管理系统是一个为用户提供方便、快捷、高效的音乐平台可以让用户可以随时随地享受音乐发现新的音乐分享自己的音乐喜好增强音乐的社交属性。
业务需求及处理流程
用户管理用户可以注册、登录、修改个人信息、注销账号等 歌单管理用户可以创建、编辑、删除自己的歌单可以将音乐添加到歌单中可以查看、收藏其他用户的歌单可以分享自己的歌单到社交媒体等 收藏管理用户可以收藏自己喜欢的音乐、歌单、歌手等可以查看、取消收藏、管理自己的收藏夹 音乐管理系统可以存储音乐的各种信息包括歌曲、专辑、歌手、流派歌词等。可以查询音乐的歌词播放地址等 评论管理用户可以评论别人的歌曲歌单可以查看自己的评论删除自己的评论。 处理流程 用户相关流程 歌单相关流程 收藏相关流程 音乐相关流程
功能需求及数据需求分析
用户模块实现用户的注册、登录、修改个人信息、注销账号等功能以及用户的身份验证、权限控制、个性化设置等功能。用户模块的数据需求包括用户的基本信息用户名、密码、邮箱、手机号、昵称、头像、性别、年龄、地区歌单模块实现歌单的创建、编辑、删除等功能歌单模块的数据需求包括歌单的基本信息歌单名、创建者、创建时间、描述、封面、歌单的内容信息包含的音乐、音乐的顺序、音乐的数量、歌单的统计信息收藏量、播放量、评分、评论数收藏模块实现收藏的添加、取消、查看、管理等功能收藏模块的数据需求包括收藏的基本信息收藏的类型、收藏的对象、收藏的时间、收藏的统计信息收藏的数量、收藏的评分音乐模块实现音乐的存储、展示、播放、下载等功能音乐模块的数据需求包括音乐的基本信息如歌曲名、歌手名、专辑名、时长、大小、格式、封面、歌词等、音乐的统计信息如播放量、下载量、收藏量、评分、评论数等等评论模块实现用户在不同音乐歌单下进行评论评论模块的数据需求包括评论的基本信息如评论的用户评论的时间评论的内容等、评论的统计信息如点赞量转发量回复量等。
业务规则分析
用户规则用户必须注册并登录才能使用系统的功能用户可以修改自己的个人信息可以注销自己的账号但不能恢复已注销的账号用户可以给系统提供反馈信息系统会根据用户的反馈信息改进服务质量歌单规则歌单必须有一个唯一的id系统不会存储或展示重复的歌单歌单必须有一个创建者系统会记录歌单的创建者和创建时间歌单必须有一个描述系统会展示歌单的描述系统会展示歌单的内容和音乐的顺序收藏规则收藏必须有一个唯一的id系统不会存储或展示重复的收藏收藏必须有一个对象系统会记录收藏的对象和收藏的时间收藏除了id与收藏名其他都可以为空音乐规则每首音乐都有1个唯一的id系统不会存储或展示重复的音乐系统会记录音乐的播放地址、歌手、歌曲名称、歌词信息等评论规则每个评论都会有1个唯一的id系统不会存储id重复的评论评论只限于歌曲与歌单。
概念设计
命名规范
实体集的名称应该是单数名词且首字母大写例如User、Music、Playlist等。属性的名称应该是小写字母且用下划线分隔单词例如user_id、song_name、playlist_id等。联系集的名称应该是两个相关实体集的名称用下划线连接例如User_PlayList、PlayList_Music、User_Favor等。主键属性的名称应该是实体集的名称加上_id例如user_id、playlist_id、song_id等。外键属性的名称应该是参照实体集的主键属性的名称例如creator_id、song_id、object_id等。
实体集及属性
用户User用户是系统的基本使用者用户可以注册、登录、修改个人信息、注销账号等。用户实体集的属性有 user_id用户的唯一标识主键char类型非空。user_name用户的用户名用于登录唯一字符串类型非空长度不超过255个字符。user_password用户的密码用于登录字符串类型非空长度不超过20个字符。email用户的邮箱用于验证和找回密码唯一字符串类型非空长度不超过50个字符。phone用户的手机号用于验证和找回密码唯一字符串类型非空长度为11个字符。nickname用户的昵称用于展示字符串类型非空长度不超过20个字符。gender用户的性别用于展示字符串类型非空长度为1个字符只能是’男’或’女’。age用户的年龄用于展示整数类型非空范围在0到120之间。 音乐Music音乐是系统的基本内容音乐可以被存储、展示、播放、下载等。音乐实体集的属性有 music_id音乐的唯一标识主键char类型非空。music_name音乐的名称用于展示字符串类型非空长度不超过50个字符。art_id音乐的歌手的id用于展示字符串类型非空长度10个字符。album音乐的专辑名称用于展示字符串类型非空长度不超过50个字符。cover_url音乐的封面用于展示字符串类型非空长度不超过100个字符存储图片的URL。lyric_url音乐的歌词用于展示字符串类型非空长度不超过100个字符存储歌词的URL。type_id音乐的风格用于分类字符串类型非空长度不超过20个字符。play_count音乐的播放量用于统计整数类型非空范围在0到1000000000之间初始值为0。collect_count音乐的收藏量用于统计整数类型非空范围在0到1000000000之间初始值为0。play_url音乐的播放地址字符串类型非空长度不超过100个字符存储歌曲的URL。 歌单Playlist歌单是系统的基本组织形式歌单可以被创建、编辑、删除等。歌单实体集的属性有 playlist_id歌单的唯一标识主键整数类型非空自增。playlist_name歌单的名称用于展示字符串类型非空长度不超过50个字符。user_id歌单的创建者用于展示外键引用用户实体集的user_id属性整数类型非空。create_time歌单的创建时间用于展示日期时间类型非空格式为’YYYY-MM-DD HH:MM:SS’。description歌单的描述用于展示字符串类型非空长度不超过500个字符。cover歌单的封面用于展示字符串类型非空长度不超过100个字符存储图片的URL。tag_id歌单的标签用于分类字符串类型非空长度不超过10个字符。 收藏Collect收藏是系统的基本交互形式收藏可以被添加、取消、查看、管理等。收藏实体集的属性有 collect_id收藏的唯一标识主键整数类型非空自增。collect_type收藏的类型用于分类字符串类型非空长度为2个字符只能是’歌曲’或’歌单’分别表示收藏的对象是音乐或歌单。 user_id收藏的用户用于展示外键引用 User实体集的外键。 collect_time收藏的创建时间用于展示日期时间类型非空格式为’YYYY-MM-DD HH:MM:SS’。description收藏的描述用于展示字符串类型非空长度不超过500个字符。 评论Comment评论是系统的基本内容评论可以被存储、展示等。评论实体集的属性有 con_id评论的唯一标识主键char类型非空。user_id用户的唯一标识char类型非空。content评论的内容char类型非空。item_id被评论对象的唯一标识char类型非空。item_type被评论对象的类型代表着歌单或歌曲enum类型非空。
联系集及属性
用户_歌单User_Playlist用户和歌单之间的联系集表示用户可以创建、编辑、删除自己的歌单歌单_音乐Playlist_Music歌单和音乐之间的联系集表示歌单可以包含一个或多个音乐音乐可以属于一个或多个歌单歌单的创建者可以将音乐添加到歌单中也可以从歌单中移除音乐歌单的内容和音乐的顺序可以被编辑用户_收藏User_Collect用户和收藏之间的联系集表示用户可以收藏自己喜欢的音乐、歌单、歌手等也可以查看、取消收藏、管理自己的收藏夹 收藏_音乐Collect_Music收藏和音乐的联系集表示一首歌可以被一个或多收藏夹收藏一个收藏夹可以收藏一个或多个音乐用户可以向收藏夹中增添、删除音乐收藏_歌单Collect_Playlist收藏和歌单的联系集表示一个歌单可以被一个或多收藏夹收藏一个收藏夹可以收藏一个或多个歌单用户可以向收藏夹中增添、删除歌单评论_音乐Comment_Music评论音乐的联系集表示一首歌可以拥有多个评论但同一个评论只能属于一首歌用户可以自己添加、删除评论评论_歌单Comment_Playlist评论歌单的联系集表示一个歌单可以拥有多个评论但同一个评论只能属于一歌单用户可以自己添加、删除评论。
系统总ER图 User Playlist Collect Music Comment 总E-R图
逻辑设计
关系的设计
经过以上E-R图设计再对相关表结构优化后得到如下设计
Useruser_id、user_name、user_password、email、phone、nickname、gender、ageMusicmusic_id、music_name、art_id、art_name、album、cover_url、lyric_url、type_id、type_name、play_count、collect_count、play_urlPlaylistplaylist_id、playlist_name、user_id、create_time、description、cover_url、tag_id、tag_namePlaylistDetailsplaylist_id、music_idCollectcollect_id、user_id、collect_time、collect_nameCollectDetailsMusiccollect_id、item_idCollectDetailsPlaylistcollect_id、item_idCommentcon_id、user_id、content、item_id、tiem_type
关系的优化
此数据库是满足第二范式2NF的 这个数据库满足第一范式1NF因为每个表中的所有属性都是不可再分的原子值。 这个数据库满足第二范式2NF因为每个表中的非主属性都完全函数依赖于主键没有部分函数依赖的情况。例如Music表中的所有非主属性都完全函数依赖于主键music_id而不是部分依赖于music_name或art_name等。 这个数据库不满足第三范式3NF 因为type_name和tag_name字段并不能由music_id和playlist_id得出 因此得出存在相关传递依赖 type_id→type_name tag_id→tag_name art_id→art_name 另外因为另外CollectDetailsMusic表和CollectDetailsPlaylist表中的数据有着很多重合外加上表数量很多后期难以维护所以我将这两个合并成一张CollectDetails表再加上一个字段item_type用以区分item_id是Music_id还是Playlist_id 经过修改后得到以下数据表
Useruser_id、user_name、user_password、email、phone、nickname、gender、ageMusicmusic_id、music_name、art_id、album、cover_url、lyric_url、type_id、play_count、collect_count、play_urlPlaylistplaylist_id、playlist_name、user_id、create_time、description、cover_url、tag_idPlaylistDetailsplaylist_id、music_idCollectcollect_id、user_id、collect_time、collect_nameCollectDetailscollect_id、item_id、item_typeCommentcon_id、user_id、content、item_id、item_typeMusicTypetype_id、type_namePlaylistTypetag_id、tag_nameArtistart_idart_name
这个数据库满足第三范式3NF因为每个表中的非主属性都不传递函数依赖于主键也就是说不存在非主属性之间的依赖关系。例如Music表中的type_id属性不依赖于music_name属性而只依赖于主键user_id。
数据库基本表设计
User
字段名数据类型长度主键非空描述user_idchar10√√用户唯一标识user_namevarchar50√用户的用户名user_passwordvarchar20√用户的密码emailvarchar50√用户的邮箱phonechar11√用户的手机号nicknamevarchar50√用户的昵称genderenum用户的性别ageint50用户的年龄
Music
字段名数据类型长度主键非空描述music_idchar10√√音乐的唯一标识music_namevarchar50√音乐的名称art_idchar10√音乐的歌手的idalbumvarchar50音乐的专辑名称cover_urlvarchar100√音乐的封面lyric_urlvarchar100音乐的歌词type_idchar5√音乐风格的唯一标识play_countbigint音乐的播放量collect_countbigint音乐的收藏量play_urlvarchar100√音乐的播放地址
Playlist
字段名数据类型长度主键非空描述playlist_idchar10√√歌单的唯一标识playlist_namevarchar50√歌单的名称user_idchar10√歌单的创建者create_timedate√歌单的创建时间descriptiontext歌单的描述cover_urlvarchar100√歌单的封面tag_idchar5√歌单标签的唯一标识
PlaylistType
字段名数据类型长度主键非空描述tag_idchar5√√歌单标签的唯一标识tag_namevarchar10√歌单标签
PlaylistDetails
字段名数据类型长度主键非空描述playlist_idchar10√√歌单的唯一标识music_idchar10√√音乐的唯一标识
Collect
字段名数据类型长度主键非空描述collect_idchar10√√收藏的唯一标识user_idchar10√收藏的用户collect_timedate√收藏的创建时间collect_namevarchar20收藏的名字
CollectDetails
字段名数据类型长度主键非空描述collect_idchar10√√收藏的唯一标识list_idchar10√√收藏项目的唯一标识item_typeenum√√收藏项目的类型
MusicType
字段名数据类型长度主键非空描述type_idchar5√√音乐风格的唯一标识type_namevarchar50√音乐风格
Comment
字段名数据类型长度主键非空描述con_idchar10√√评论的唯一标识user_idchar10√评论用户的唯一标识contenttext√评论的内容item_idchar10√被评论对象的iditem_typeenum√被评论对象的类型
Artist
字段名数据类型长度主键非空描述art_idchar10√√歌手的唯一标识art_namevarchar50√歌手姓名
物理设计
表名索引名索引列索引类型UserUser_PrimaryKeyuser_id主键索引UserUser_Unique_emailemail唯一性索引UserUser_Unique_phonephone唯一性索引MusicMusic_PrimaryKeymusic_id主键索引PlaylistPlaylist_PrimaryKeyplaylist_id主键索引PlaylistDetailsPlaylistDetails_PrimaryKeyplaylist_id music_id主键索引CollectCollect_PrimaryKeycollect_id主键索引CollectDetailsCollectDetails_PrimaryKeycollect_id item_id item_type主键索引CommentComment_PrimaryKeycon_id主键索引MusicTypeMusicType_PrimaryKeytype_id主键索引PlaylistTypePlaylistType_PrimaryKeytag_id主键索引ArtistArtist_PrimaryKeyart_id主键索引
关系模式存取方式选择
数据库的存储结构
综上所述 本数据库一共设计了10张表User表用来存储用户数据、Music表用来存储音乐数据、Artist表用来存储作者数据、Playlist表用来存储歌单的定义数据、PlaylistDetails表用来存储歌单中具体歌曲列表数据、Collect表用来存储收藏的定义数据、CollectDetails表用来存储收藏的具体项目数据、Comment表用来存储评论数据、MusicType表用来存储音乐的风格数据、PlaylistType表用来存储歌单的类型数据 本数据库一共定义了12个索引其中10个索引均为主键索引在定义主键时会自动生成2个唯一索引分别是User表中的phone和email字段。
数据库应用设计
数据库脚本
建库建表
CREATE DATABASE MusicManager;
USE MusicManager;
CREATE TABLE User (user_id CHAR ( 10 ) PRIMARY KEY,user_name VARCHAR ( 50 ) NOT NULL,user_password VARCHAR ( 20 ) NOT NULL,email VARCHAR ( 50 ) NOT NULL UNIQUE,phone CHAR ( 11 ) NOT NULL UNIQUE,nickname VARCHAR ( 50 ) NOT NULL,gender ENUM ( 男, 女 ,未知) DEFAULT 未知 ,age INT DEFAULT 18
);
CREATE TABLE Music (music_id CHAR ( 10 ) PRIMARY KEY,music_name VARCHAR ( 50 ) NOT NULL,art_id CHAR ( 10 ) NOT NULL,album VARCHAR ( 50 ),cover_url VARCHAR ( 100 ) NOT NULL,lyric_url VARCHAR ( 100 ),type_id CHAR ( 5 ) NOT NULL,play_count BIGINT DEFAULT 0,collect_count BIGINT DEFAULT 0,play_url VARCHAR ( 100 ) NOT NULL
);
CREATE TABLE Playlist (playlist_id CHAR ( 10 ) PRIMARY KEY,playlist_name VARCHAR ( 50 ) NOT NULL,user_id CHAR ( 10 ) NOT NULL,create_time DATE NOT NULL,description TEXT,cover_url VARCHAR ( 100 ) NOT NULL,tag_id CHAR ( 5 ) NOT NULL
);
CREATE TABLE PlaylistType ( tag_id CHAR ( 5 ) PRIMARY KEY, tag_name VARCHAR ( 10 ) NOT NULL
);
CREATE TABLE PlaylistDetails (playlist_id CHAR ( 10 ) NOT NULL, music_id CHAR ( 10 ) NOT NULL, PRIMARY KEY ( playlist_id, music_id )
);
CREATE TABLE Collect (collect_id CHAR ( 10 ) PRIMARY KEY,user_id CHAR ( 10 ) NOT NULL,collect_time DATE NOT NULL,collect_name VARCHAR ( 20 )
);
CREATE TABLE CollectDetails (collect_id CHAR ( 10 ) NOT NULL,list_id CHAR ( 10 ) NOT NULL,item_type ENUM ( 歌单, 歌曲 ) NOT NULL,PRIMARY KEY ( collect_id, list_id, item_type )
);
CREATE TABLE MusicType (
type_id CHAR ( 5 ) PRIMARY KEY,
type_name VARCHAR ( 50 ) NOT NULL
);
CREATE TABLE Comment (con_id CHAR ( 10 ) PRIMARY KEY,user_id CHAR ( 10 ) NOT NULL,content TEXT NOT NULL,item_id CHAR ( 10 ) NOT NULL,item_type ENUM ( 歌曲, 歌单 ) NOT NULL
);
CREATE TABLE Artist (art_id CHAR ( 10 ) PRIMARY KEY,art_name VARCHAR ( 50 ) NOT NULL
);
ALTER TABLE Music ADD FOREIGN KEY ( type_id ) REFERENCES MusicType ( type_id ), ADD FOREIGN KEY ( art_id ) REFERENCES Artist ( art_id );
ALTER TABLE Playlist ADD FOREIGN KEY ( user_id ) REFERENCES User ( user_id ),ADD FOREIGN KEY ( tag_id ) REFERENCES PlaylistType ( tag_id );
ALTER TABLE PlaylistDetails ADD FOREIGN KEY ( playlist_id ) REFERENCES Playlist ( playlist_id ),ADD FOREIGN KEY ( music_id ) REFERENCES Music ( music_id );
ALTER TABLE Collect ADD FOREIGN KEY ( user_id ) REFERENCES USER ( user_id );
ALTER TABLE CollectDetails ADD FOREIGN KEY ( collect_id ) REFERENCES Collect ( collect_id );
ALTER TABLE Comment ADD FOREIGN KEY ( user_id ) REFERENCES User ( User_id );插入数据(因为数据过多所以只展示其中一部分) Artist PlaylistType MusicType User Collect PlaylistDetails
数据库完整性设计
每个表都应有一个主键用于唯一标识表中的每一行如果一个表的某列包含另一个表的主键则该列应被设置为外键当向Music表中修改数据时CollectDetails与PlaylistDetails与Comment表需同时修改当修改User表数据时需同时修改Collect与Comment与Playlist表当修改Artist表数据时需同时修改Music表里的数据。
数据库安全性设计
用户想要修改相关数据表必须拥有相关数据表权限
存储过程和触发器设计
这个触发器会在向 CollectDetails 表插入数据之前检查 item_id 是否合法。如果 item_type 的值为 “歌单”则 item_id 需要在 Playlist 表的 Playlist_id 字段内如果 item_type 值为 “歌曲”则 item_id 需要在 Music 表的 music_id 字段内。如果不匹配触发器会抛出一个错误错误内容为 “数据不匹配请重新输入”。 这个存储过程接受两个 music_id 作为输入比较这两个 music_id 对应的 play_count。如果第一个 music_id 的 play_count 大于或等于第二个 music_id 的 play_count则输出 0否则输出 1。 这个存储函数接受一个 playlist_id 作为输入返回这个 playlist_id 对应的歌单中的歌曲总数。这个触发器会在向 Comment 表插入数据之前检查 item_id 是否合法。如果 item_type 的值为 “歌单”则 item_id 需要在 Playlist 表的 Playlist_id 字段内如果 item_type 值为 “歌曲”则 item_id 需要在 Music 表的 music_id 字段内。如果不匹配触发器会抛出一个错误错误内容为 “数据不匹配请重新输入”。这个触发器会在 User 表的 user_id 被修改后自动更新 Collect、Comment 和 Playlist 表中的对应 user_id。这个触发器会在 MusicType 表的 type_id 被修改后自动更新 Music 表中的对应 type_id。这个触发器会在 Artist 表的 art_id 被修改后自动更新 Music 表中的对应 art_id。
总结
音乐管理系统是一个完善的数据库系统。系统的业务需求包括用户管理、歌单管理、收藏管理、音乐管理和评论管理。系统的功能需求及数据需求分析包括用户模块、歌单模块、收藏模块、音乐模块和评论模块。系统的业务规则分析包括用户规则、歌单规则、收藏规则、音乐规则和评论规则。系统中一共包含了10个表以及对应的主键与相应的外键。创建的数个存储过程、函数与触发器保障了数据库的完整性与安全性在撰写这次大作业的过程中我学到很多如如何分析业务需求和数据需求如何设计数据库表如何确保数据库的完整性和安全性明白了如何分析业务需求如何更好的理解业务如将业务转化成文字与图表与代码最终实现业务的流程我也明白了团队合作的重要性很多事光凭一个人的力量很难进行下去唯有进行团队合作合理分工才能顺利推进在完成这次作业过程中我也遇到了很多问题与困难如对于业务的不理解导致走了很多弯路前期方案一直改了删删了改浪费了很多时间。如对于数据库的一些理论知识也遗忘了很多如关系转换er图第几范式等。解决方案也很简单第一就是不断熟悉业务多想想具体的应用场景其次对于数据库的基础知识也需要对其进行专门的复习与记忆并不断在项目中实践这将是一个长期的过程需要不断进行。综上所述在完成这次作业的过程中我学到了很多虽然也遇到了很多困难但有这些困难得到的经验与教训是十分宝贵的。我在以后的学习和工作中也将不断总结经验不断提高自己的能力取得更好的成果。