KTV自主选歌系统数据库期末大作业看看你就知道对你多有用.docx
《KTV自主选歌系统数据库期末大作业看看你就知道对你多有用.docx》由会员分享,可在线阅读,更多相关《KTV自主选歌系统数据库期末大作业看看你就知道对你多有用.docx(25页珍藏版)》请在冰豆网上搜索。
KTV自主选歌系统数据库期末大作业看看你就知道对你多有用
sql大作业2011-2012学年度
KTV自主选歌系统
数据库设计说明书
2011/12/20
基于SQL2008数据库设计软件,设计的一款方便大家K歌的小型数据库服务系统系统简介。
KTV自主选歌系统数据库说明书
1引言
2011-2012学年第一学期SQL大作业,欢迎检查指导!
1.1设计目的
}本系统主要用于KTV自助选歌,现在社会年轻人娱乐休闲方式很多,其中去KTVhigh一下是必备项目。
本数据库包括歌曲信息,歌手信息,歌曲所属专辑信息等,方便顾客根据歌曲名、歌曲类型等选择自己喜欢的歌曲,满足顾客需求。
1.2定义
1.系统名称:
KTV自主选歌系统
2.数据库设计人员:
2需求分析
2.1功能分析
1.歌手信息的管理:
可以查询、增加、删除、修改管理
2.歌曲信息的管理:
可以查询、增加、删除、修改管理
3.乐队信息管理:
可以查询、增加、删除、修改管理
4.专辑信息的管理:
可以查询、增加、删除、修改管理
5.曲目类型的管理:
可以查询、增加、删除、修改管理
6.预选歌曲表的管理:
根据用户的自己的需求,选择歌曲曲目
2.2数据字典
1.数据项
数据项
含义说明
类型
长度
歌手名字
指定歌手姓名
Char
10
所属公司
指定歌手所属公司名称
Char
40
性别
指定歌手性别
Char
2
来自地区
说明歌手所属范围
Char
10
乐队编号
唯一标识一个乐队
乐队名称
说明乐队包含歌手名称
Char
20
曲风编号
唯一标识一种曲风类型
曲风类型
描述歌曲类型
Char
30
曲风区域
描述歌曲风土人情背景
Char
8
歌曲名称
指定歌曲名称
Char
10
乐队来自地区
说明乐队来自地区
Char
10
专辑编号
唯一标识一张专辑
Char
4
专辑名称
说明专辑名称
Char
10
歌曲编号
标识歌曲信息
Char
4
歌手编号
标识歌手信息
Char
4
专辑编号
标识专辑信息
Char
4
2.数据结构
编号
数据结构名
属性
1
歌手
歌手编号,歌手名字,性别,所属公司,来自地区,乐队编号
2
曲目
歌曲编号,歌曲名称,曲风类型,专辑编号
3
专辑
专辑编号,专辑名称,歌曲编号,歌手编号
4
乐队信息
乐队名称,乐队编号,来自地区
5
曲风
曲风类型,歌曲编号
6
歌曲信息
歌曲编号,歌手编号
7
专辑信息
专辑编号,歌手编号
8
预选歌曲
歌曲名称,歌手名字
3.数据流
编号
数据流名
输入
输出
1
变更歌曲
变更信息
歌曲信息
2
查询歌曲
歌曲编号
歌曲信息
3
变更歌手
变更信息
歌手信息
4
查询歌手
歌手编号
歌手信息
5
变更乐队
变更信息
乐队信息
6
查询乐队
乐队编号
乐队信息
7
查询专辑
专辑编号
专辑信息
8
变更专辑
变更信息
专辑信息
9
变更曲风
变更信息
曲风信息
10
查询曲风
曲风类型
曲风信息
11
提交选歌信息
歌曲编号,歌手编号,乐队编号,专辑编号
预选歌曲信息
12
查询已选歌曲
歌曲编号,歌手编号
歌曲信息
4.数据存储
数据存储名
输入数据流
输出数据流
说明部分
歌曲信息
变更歌曲
查询歌曲,提交选歌信息
歌手信息
变更歌手
查询歌手,提交选歌信息
专辑信息
变更专辑,变更歌曲,变更歌手
查询专辑
乐队信息
变更乐队
查询乐队
选歌信息
提交选歌信息
查询已选歌曲
1.处理过程
处理过程名
输入数据流
输出数据流
说明部分
整理分析数据
终端
歌曲信息,歌手信息,专辑信息,乐队信息
根据互联网的信息定时更新数据库
操作数据
终端
变更歌曲,变更歌手,变更专辑,变更乐队
将得到的数据向数据库增加,更改
选歌
提交选歌信息
2.3数据流图
3结构设计
3.1概念结构设计
3.3.1局部E-R图
3.3.2全局关系图
歌手信息
歌曲信息
演唱
NM
1NN
N
N
N1
NN
1111
1
3.3.3全局E-R图
歌手信息
专辑信息
乐队信息
曲风类型
歌曲信息
演唱
拥有
属于
专辑编号
曲风区域
所属公司
歌手编号
乐队名称
歌手编号
来自地区
曲风编号
歌曲名称
歌曲编号
专辑名称
歌手编号
属于
包含
属于
属于
来自地区
性别
歌曲编号
专辑编号
乐队编号
曲风编号
曲风描述
MN
NN
N1N
N1
NN
1
111
1
3.2逻辑结构设计
3.2.1基本表
歌手(歌手编号,歌手名字,所属公司,性别,来自地区,乐队编号)
曲目(歌曲编号,歌曲名称,曲风编号,专辑编号,乐队编号)
专辑(专辑编号,专辑名称,歌手编号,曲风编号,乐队编号)
乐队信息(乐队编号,乐队名称,来自地区)
曲风(曲风编号,曲风描述,曲风区域,语言类型)
歌曲信息(歌曲编号,歌手编号)
预选歌曲(歌曲名称,歌手名字)
3.3物理结构设计
3.3.1创建数据库代码
CREATEDATABASEKTV自主选歌系统
on
(name='KTV自主选歌系统_data',
='e:
\sql\KTV自主选歌系统_data.mdf',
size=10,
maxsize=50,
=5mb
)
Logon
(name='KTV自主选歌系统_log',
='e:
\sql\KTV自主选歌系统_log.ldf',
size=5mb,
maxsize=25mb,
=5mb
)
go
3.3.2创建表代码
CREATETABLE歌手信息表
(歌手编号char(4),
歌手名字CHAR(10),
所属公司CHAR(40),
性别CHAR
(2)CHECK(性别IN('男','女'))NOTNULL,
来自地区CHAR(10),
乐队编号CHAR(4),
PRIMARYKEY(歌手编号),
FOREIGNKEY(乐队编号)REFERENCES乐队信息表(乐队编号))
CREATETABLE曲风表
(
曲风编号CHAR(4)PRIMARYKEY,
曲风类型CHAR(30),
曲风区域CHAR(8))
CREATETABLE预选歌曲表
(歌曲名称CHAR(10),
歌手名字CHAR(10))
CREATETABLE乐队信息表
(
乐队编号CHAR(4)PRIMARYKEY,
乐队名称CHAR(20),
来自地区CHAR(10),
歌手编号CHAR(10))
CREATETABLE专辑信息表
(专辑编号CHAR(4),
专辑名称CHAR(30),
曲风类型CHAR(10),
乐队编号CHAR(40),
歌手编号CHAR(10)
PRIMARYKEY(专辑编号))
CREATETABLE曲目表
(歌曲编号CHAR(4)PRIMARYKEY,
歌曲名称CHAR(10),
曲风编号CHAR(10),
专辑编号CHAR(30),
乐队编号CHAR(30))
CREATETABLE歌曲信息表
(歌曲编号CHAR(4),
歌手编号CHAR(10),
PRIMARYKEY(歌曲编号,歌手编号))
3.3.3表截图
3.3.4创建视图,存储过程,默认,权限,约束,触发器代码及视图
1.创建约束代码
ALTERTABLE曲目表
ADDCONSTRAINTFK_QM
FOREIGNKEY(曲风编号)REFERENCES曲风表(曲风编号)
ALTERTABLE曲目表
ADDCONSTRAINTFK2_QM
FOREIGNKEY(专辑编号)REFERENCES专辑信息表(专辑编号)
ALTERTABLE歌曲信息表
ADDCONSTRAINTFK_XX
FOREIGNKEY(歌曲编号)REFERENCES曲目表(歌曲编号)
ALTERTABLE曲风表
ADDCONSTRAINTaaDEFAULT'个性'for曲风编号
ALTERTABLE专辑信息表
ADDCONSTRAINTFK_ZJ
FOREIGNKEY(歌手编号)REFERENCES歌手信息表(歌手编号)
ALTERTABLE歌曲信息表
ADDCONSTRAINTFK2_XX
FOREIGNKEY(歌手编号)REFERENCES歌手信息表(歌手编号)
2.触发器
CREATETRIGGERTR1_ADD
ON歌手表
FORINSERT
AS
IFEXISTS
(SELECT*FROMINSERTEDWHERE性别NOTIN('男','女'))
BEGIN
RAISERROR('输入值为男或女',16,1)
ROLLBACKTRANSACTION
END
CREATETRIGGERUP_tri
ON曲目表
FORUPDATE
AS
DECLARE@OLDNVARCHAR(255)
DECLARE@NEWNVARCHAR(255)
SELECT@OLD=专辑编号FROMDELETED
SELECT@NEW=专辑编号FROMINSERTED
UPDATE专辑表SET专辑编号=@newwhere专辑编号=@old
begin
raiserror(‘需要级联更新专辑表中的专辑编号')
rollbacktransaction
end
改的:
CREATETRIGGERTR1_ADD
ON歌手信息表
FORINSERT
AS
IFEXISTS
(SELECT*FROMINSERTEDWHERE性别NOTIN('男','女'))
BEGIN
RAISERROR('输入值为男或女',16,1)
ROLLBACKTRANSACTION
END
CREATETRIGGERUP_tri
ON曲目表
FORUPDATE
AS
DECLARE@OLDNVARCHAR(255)
DECLARE@NEWNVARCHAR(255)
SELECT@OLD=专辑编号FROMDELETED
SELECT@NEW=专辑编号FROMINSERTED
UPDATE专辑表SET专辑编号=@newwhere专辑编号=@old
begin
rollbacktransaction
end
3.授予权限
USEKTV自主选歌系统
go
grantselect,update,delete
on预选歌曲表
topublic
DENYINSERT,delete
ON曲目表
TOpublic
grantselect
on歌手表
topublic
go
denydelete,update
on歌手表
topublic
DENYINSERT,delete
ON专辑表
TOpublic
DENYINSERT,delete
ON乐队信息表
TOpublic
(grantselect,delete,update
on歌手表
todb_owner
go)(消息4617,级别16,状态1,第1行
无法对特殊角色授予、拒绝或撤消权限。
)
改过的:
USEKTV自主选歌系统
go
grantselect,update,delete
on预选歌曲表
topublic
DENYINSERT,delete
ON曲目表
TOpublic
grantselect
on歌手信息表
topublic
go
denydelete,update
on歌手信息表
topublic
DENYINSERT,delete
ON专辑信息表
TOpublic
DENYINSERT,delete
ON乐队信息表
TOpublic
4.存储过程
ifexists(selectnamefromsysobjectswherename='歌手选歌'andtype='P')
Dropprocedure歌手选歌
go
createprocedure歌手选歌
@歌手名称varchar(10)
as
select歌手表.歌手编号,歌手名字,歌曲名称
from歌手表,歌曲信息表,曲目表
where歌手表.歌手编号=歌曲信息表.歌手编号and歌曲信息表.歌曲编号=曲目表.歌曲编号
and歌手名字=@歌手名称
exec歌手选歌'阿桑'
改过的:
ifexists(selectnamefromsysobjectswherename='歌手选歌'andtype='P')
Dropprocedure歌手选歌
go
createprocedure歌手选歌
@歌手名字varchar(10)
as
select歌手信息表.歌手编号,歌手信息表.歌手名字,曲目表.歌曲名称
from歌手信息表,歌曲信息表,曲目表
where歌手信息表.歌手编号=歌曲信息表.歌手编号and歌曲信息表.歌曲编号=曲目表.歌曲编号
and歌手名字=@歌手名字
exec歌手选歌'阿桑'
ifexists(selectnamefromsysobjectswherename='歌曲选歌'andtype='P')
Dropprocedure歌曲选歌
go
createprocedure歌曲选歌
@歌曲名称varchar(10)
as
select曲目表.歌曲编号,歌手名字,歌曲名称
from歌手表,歌曲信息表,曲目表
where歌手表.歌手编号=歌曲信息表.歌手编号and歌曲信息表.歌曲编号=曲目表.歌曲编号
and歌曲名称=@歌曲名称
exec歌手选歌'阿桑'
ifexists(selectnamefromsysobjectswherename='乐队选歌'andtype='P')
Dropprocedure乐队选歌
go
createprocedure乐队选歌
@乐队名称varchar(10)
as
select歌曲编号,歌曲名称,乐队名称
from曲目表,乐队信息表
where乐队信息表.乐队编号=曲目表.乐队编号and乐队名称=@乐队名称
exec乐队选歌'SHE'
ifexists(selectnamefromsysobjectswherename='曲风类型选歌'andtype='P')
Dropprocedure曲风类型选歌
go
createprocedure曲风类型选歌
@曲风类型char(30)
as
select曲目表.歌曲编号,歌手名字,歌曲名称,曲风类型,曲风区域
from歌手表,歌曲信息表,曲目表,曲风表
where歌手表.歌手编号=歌曲信息表.歌手编号and歌曲信息表.歌曲编号=曲目表.歌曲编号and曲目表.曲风编号=曲风表.曲风编号
and曲风类型=@曲风类型
exec曲风类型选歌'欢快'
5.视图的创建
createview全部歌曲浏览
as
select曲目表.歌曲编号,歌曲名称,歌手名字
from歌曲信息表,歌手表,曲目表
where歌曲信息表.歌曲编号=曲目表.歌曲编号and歌手表.歌手编号=歌曲信息表.歌手编号
select*from全部歌曲浏览
createview专辑浏览
as
select专辑名称,歌曲名称,歌手名字
from专辑表,曲目表,歌手表,歌曲信息表
where专辑表.专辑编号=曲目表.专辑编号and歌曲信息表.歌曲编号=曲目表.歌曲编号
and歌曲信息表.歌手编号=歌手表.歌手编号
改过的:
createview全部歌曲浏览
as
select曲目表.歌曲编号,歌曲名称,歌手名字
from歌曲信息表,歌手信息表,曲目表
where歌曲信息表.歌曲编号=曲目表.歌曲编号and歌手信息表.歌手编号=歌曲信息表.歌手编号
select*from全部歌曲浏览
createview专辑浏览
as
select专辑信息表.专辑名称,歌曲名称,歌手名字
from专辑信息表,曲目表,歌手信息表,歌曲信息表
where专辑信息表.专辑编号=曲目表.专辑编号and歌曲信息表.歌曲编号=曲目表.歌曲编号
and歌曲信息表.歌手编号=歌手信息表.歌手编号
createview专辑浏览
as
select专辑名称,歌曲名称,乐队名称
from专辑表,曲目表,乐队信息表
where专辑表.专辑编号=曲目表.专辑编号and曲目表.乐队编号=乐队信息表.乐队编号
改过的:
createview专辑浏览
as
select专辑名称,歌曲名称,乐队名称
from专辑信息表,曲目表,乐队信息表
where专辑信息表.专辑编号=曲目表.专辑编号and曲目表.乐队编号=乐队信息表.乐队编号