1、数据库原理实验报告综合实验 华东理工大学课程设计数据库原理实验报告本 2012 2013学年第一学期 专 业 计算机科学与技术班 级 姓 名 学 号 指导教师 计算机实验教学中心2012年 12 月实验名称:2012-2013赛季欧冠联赛小组赛管理系统实验地点:信息楼215所使用的工具软件及环境:SQL Server 2008、Visual Studio 2010一、实验目的:1通过实践,掌握数据库设计方法;2学会在一个实际的RDBMS软件平台上创建数据库系统;3掌握通过ODBC、ADO访问数据库的方法;二、实验内容:1 系统定义 项目来源:在足球比赛中,人们往往希望较容易的获得球队、球员和赛
2、程的一些信息,而管理员则希望简单方便的对其信息进行各种管理操作,同时,也需要较容易的获得球队积分,球员射手排行和各种不容错过的进球信息,所以我们选择完成一个足球联赛管理系统,这里我们就以本年度欧洲冠军联赛为载体,旨在对其球员、球队、赛程和各种排行信息进行总结和管理,方便用户和管理员进行数据的输入和查询,同时,我们也将把球迷的投票和投票结果进行管理,然后持续更新球迷最喜爱的球队和最喜爱的球员的信息,来和用户进行简单的互动,体现出我们项目的完整性和新颖性。项目名称:2012-2013赛季欧洲冠军联赛小组赛管理系统项目介绍:该系统以欧冠比赛为载体,通过SQL Server 2008实现其数据库的编写
3、和实现,利用Visual Studio 2010的C#语言完成其编写过程,对本年度欧冠联赛的各种信息进行管理,通过制作的专门界面,可以对球队、球员、比赛情况、各种统计信息进行管理。功能分析:该系统是2012-2013赛季欧冠联赛小组赛管理系统,主要是通过欧冠联赛对足球比赛的球员、球队和比赛相关的一些活动进行系统的管理和维护,所以应该以小组赛况信息为中心,组织相关程序结构。该系统的具体功能主要分为以下几个方面:1)球队信息管理:显示比赛球队的大体信息,包括球队在欧冠中的分组情况,有对球队信息的增删改查的功能。2)球员信息管理:显示球员自身的一些信息以及与球队的关联,具有对球员信息的增删改查的功能
4、。3)赛程信息管理:显示本赛季安排的比赛信息,具有增删改查的功能。4)比赛结果信息管理:显示比赛结果的相关统计信息,包括比赛客队和主队的比赛结果和球员的进球统计等,具有增删改查的功能。5)比赛积分信息管理:根据比赛结果中相关数据计算每个球队的胜场数和负场数,可以选择所在的小组,然后按照结果显示相关排名,导出积分表格,显示比赛结果的排名信息,具有增删改查的功能。6)球迷投票信息管理:主要记录每个登陆的球迷的基本信息和其所喜爱的球队和球员,对所得票数进行统计,得出最后的TOP排行榜,具有查询功能。7)竞猜管理信息系统:主要是先从赛程表中选择出并未出结果的比赛场次及其时间,然后选择用户需要竞猜的场次
5、,填入用户名和密码以及其竞猜的比分,最后可以查询竞猜是否成功,以及查看获奖情况。2 需求分析(DFD+DD)(1)数据流图(DFD)(2)数据字典数据项是数据库的关系中不可再分的数据单位。下表分别列出了数据的名称、数据的类型、长度、取值能否为空。利用SQL Server2008建立“Soccer”数据库,其基本表清单及结构描述如下:数据库中用到的表:数据库表名关系模式名称备注Course赛程赛程基本信息表Player球员球员基本信息表Score积分比赛积分信息表Team球队球队基本信息表Goal进球进球基本信息表GoalScore射手球员进球排行表Fans球迷球迷投票信息表Prediction
6、竞猜用户竞猜信息表Award获奖用户获奖信息表Course基本情况数据表,结构如下:字段名字段类型允许Null值说明Hostvarchar(20)Not Null主队Guestvarchar(20)Not Null客队Groupnovarchar(20)Not Null小组号GametimedatetimeNot Null比赛时间Hscoreint主队得分Gscoreint客队得分Player基本情况数据表,结构如下:字段名字段类型允许Null值说明Pnamevarchar(20)Not Null姓名Tnamevarchar(20)Not Null球队名称NumberintNot Null球衣
7、号码Positionvarchar(6)Not Null位置Birthdatetime生日Team基本情况信息表,结构如下:字段名字段类型允许Null值说明Tnamevarchar(20)Not Null球队名称Homevarchar(30)主场地Coachvarcar(20)教练Groupnovarchar(2)小组号Captainvarchar(20)队长Score基本情况信息表,结构如下:字段名字段类型允许Null值说明Tnamevarchar(20)Not Null球队名称Wonint胜场Evenint平场Beatenint负场Goalnoint总进球数Lostnoint总失球数Poi
8、ntint积分Goal基本情况信息表,结构如下:字段名字段类型允许Null值说明Tnamevarchar(20)NotNull球队名称NumberintNot Null球衣号码TurnintNot Null比赛轮次GoaltimeintNot Null进球时间GoalScore基本情况信息表,结构如下:字段名字段类型允许Null值说明PlaceintNot Null排名Pnamevarchar(20)Not Null姓名Tnamevarchar(20)Not Null球队名称NumberintNot Null球衣号码GoalsinNot Null进球总数Fans基本情况信息表,结构如下:字段名
9、字段类型允许Null值说明Snovarchar(20)Not Null球迷编号Snamevarchar(20) 球迷姓名Ssexvarca(20)球迷性别Fteamvarchar(20)球迷最喜爱球队Fplayervarchar(20)球迷最喜爱队员Prediction基本情况信息表,结构如下:字段名字段类型允许Null值说明Usersvarchar(30)Not Null用户名Passwordvarchar(30)Not Null密码Hostvarchar(30)Not Null主队名称Guestvarchar(30)Not Null客队名称Phscoreint 竞猜主队比分Pgscorei
10、nt竞猜客队比分Award基本情况信息表,结构如下:字段名字段类型允许Null值说明Namevarchar(30)Not Null获奖者姓名IDvarchar(30)Not Null身份证号Mailvarchar(30)Not Null电子邮箱Telephonevarchar(30)Not Null电话号码3 概念结构(E-R图)由需求分析的结果,画出基本E-R如下:对基本E-R图进行合并和消除数据冗余后得到E-R图如下:由E-R图可知,本系统设计的实体包括:(1)球员基本信息:球员姓名、所在球队名称、球衣号码、所在球队位置、生日;(2)球队基本信息:球队名称、主场地、教练、小组号、队长;(3
11、)赛程基本信息:主客队名、小组号、比赛日期、主客队比分;(4)进球表基本信息:球队名称、球衣号码、比赛轮次、进球时间;(5)积分榜基本信息:球队名称、胜场、平场、负场、总进球、总失球、积分;(6)射手榜基本信息:名次、球员姓名、球队名称、球衣号码、进球数;(7)球迷投票基本信息:编号、姓名、最喜爱的球队、最喜爱的球员;(8)比赛竞猜基本信息:用户名、密码、主队名、客队名、竞猜主队进球数、竞猜客队进球数;(9)获奖基本信息:姓名、身份证号、电子邮箱、电话号码4 逻辑结构(关系模式集+视图)1)有E-R图转化而得到的关系模式如下:(1)Team(Tname,Home,Coach,Groupno,C
12、aptain)其主键为Tname F=Tname-Home,Tname-Coach,Tname-Groupno,Tname-Captain 为BC范式;(2)Player(Pname,Tname,Number,Position,Birth)其主键为(Tname,Number) F=(Tname,Number)-Pname, (Tname,Number)-Positioin, (Tname,Number)-Brith 为BC范式;(3)Course(Host,Guest,Groupno,Gametime,Hscore,Gscore)其主键为(Host,Guest) F=(Host,Guest)-
13、Groupno,(Host,Guest)-Gametime,(Host,Guest)-Hscore, (Host,Guest)-Gscore 为BC范式;(4)Goal(Tname,Number,Turn,Goaltime)其主键为(Tname,Number,Turn,Goaltime) F=(Tname,Number,Turn,Goaltime) 为BC范式(5)Score(Tname,Won,Even,Beaten,Goalno,Lostno,Point)其主键为Tname F=Tname-Won, Tname-Even, Tname-Beaten, Tname-Goalno, Tname
14、-Lostno, Tname-Point 为BC范式;(6)GoalScore(Place,Pname,Tname,Number,Goals)其主键为(Tname,Number) F=(Tname,Number)-Place, (Tname,Number)-Pname, (Tname,Number)-Goals 为BC范式;(7)Fans(Sno,Sname,Ssex,Fteam,Fplayer)其主键为Sno F=Sno-Sname, Sno-Ssex, Sno-Fteam, Sno-Fplayer 为BC范式; (8)Prediction(Users,Password,Host,Guest
15、,Phscore,Pgscore)其主键为(User,Password,Host,Guest) F=(User,Password,Host,Guest)-Phscore, (User,Password,Host,Guest)-Pgscore 为BC范式; (9)Award(Name,ID,Mail,Telephone)其主键为ID F=ID-Name, ID-Mail, ID-Telephome 为BC范式。2)确定关系模型的存取方法在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。可对该关系的属性列进行设计,可分别设置其名
16、称、码、数据类型以及主码、是否为空等。在实际设计中最常用的存取方法是索引,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:在经常需要搜索的列上建立索引; 在主关键字上建立索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规则。才能充分利用索引的作用避免因索引引起的负面作用。3)本系统用到的视图 (1)基于Fans表,创建一个选出Fteam及其所得票数的视图s_fteam1Create view s_fteam1 AsSELECT DISTINCT Fteam, COUNT(Fteam) AS num
17、berFROM FansGROUP BY Fteam(2)创建基于视图s_fteam1的视图s_fteam,选出Fteam排名前三的数据Create view s_fteam AsSELECT TOP 3 Fteam, numberFROM s_fteam1ORDER BY number DESC(3)基于Fans表,创建一个选出Fplayer及其所得票数的视图s_fplayer1Create view s_fplayer1 AsSELECT DISTINCT Fplayer, COUNT(Fplayer) AS numberFROM FansGROUP BY Fplayer(4)创建基于视图
18、s_fplayer1的视图s_fplayer,选出Fplayer排名前三的数据Create view s_fplayer AsSELECT TOP 3 Fplayer, numberFROM s_fplayer1ORDER BY number DESC(5)创建基于Course表的视图s_prediction,选出还没有比分的比赛赛程基本信息Create view s_prediction AsSELECT Gametime,Host,GuestFrom CourseWHERE Hscore is null and Gscore is null(6)创建基于Prediction表的视图s_qu
19、izquery,选出其中的除密码以外的所有信息,密码要用户自己输入,判断正确后才能进行下面的操作Create view s_quizquerySelect Users,Host,Guest,Phscore,PgscoreForm Prediction4)本系统用到的存储过程 (1)根据传入参数是Tname还是Groupno来从Team表中查询其他的信息Create Procedure p_soccerStock column varchar(30),value varchar(50) ASIF column=Tname SELECT Tname,Home,Coach,Groupno,Capta
20、in FROM Team WHERE Tname LIKE %+value+%ELSE SELECT Tname,Home,Coach,Groupno,Captain FROM Team WHERE Groupno LIKE %+value+%(2)根据传入参数Groupno来从Team表和Score做连接,查询其每组的球队和积分Create Procedure p_scoreStock value NVarChar(2)AS SELECT Score.Tname,Won,Even,Beaten,Goalno,Lostno,Point FROM Team,Score WHERE Team.Tn
21、ame=Score.Tname and Groupno LIKE %+value+%(3)根据传入参数Tname,从Player表中查询属于某球队的所有球员的信息Create Procedure p_playerStock column varchar(20),value varchar(50) AS SELECT Pname,Number,Position,Birth FROM Player WHERE Tname LIKE %+value+%(4)根据传入参数Turn,从Goal表中查询某轮比赛的所有球员进球信息Create Procedure p_bookStock column var
22、char(30),value varchar(50) AS SELECT Tname,Number,GoalTime FROM Goal WHERE Turn LIKE %+value+%5 物理设计(存储结构及索引)确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。 索引设计:各表都有自己的主键,主键为聚集索引,而且每个表只能建立一个聚集索引,所以只能创建非聚集索引。(1)创建Course信息表代码:CREATE TABLE Course(Host varchar(20) NOT NULL, Guest
23、varchar(20) NOT NULL, Groupno varchar(2) NOT NULL, Gametime datetime NOT NULL, Hscore int NULL, Gscore int NULL, CONSTRAINT PK_Course PRIMARY KEY (Host,Guest)(2)创建球队Team信息表、球员Player信息表、Goal信息表、Score信息表、GoalScore信息表、Fans信息表、Prediction信息表、Award信息表代码,在此不再赘述。6 系统实现(代码见附录)1)主界面功能:主界面的主要功能是对用户选择相应操作的触发,如球
24、队管理功能、球员管理功能等。界面设计:2)球队管理模块功能:添加、删除、修改和查询球队的信息界面设计:3)球员管理模块功能设计:添加、删除、修改和查询球员的信息界面设计:4)赛程管理模块功能设计:分别对赛程表和进球表进行查询等操作。界面设计:5)TOP榜管理模块功能设计:主要是对小组积分和球员射手榜的查询等功能界面设计:6)球迷投票管理模块功能设计:主要是记录球迷的基本信息和对投票的记录与管理界面设计:7)用户竞猜管理模块功能设计:主要是记录用户的基本信息和对比赛结果的竞猜情况,界面设计:三、出现的问题和解决方案1)关于界面: (1)刚开始编程的时候对按钮的操作却没有任何反应,很纠结,后来发现
25、是按钮的Name属性与函数编程中的按钮的名称弄混了,比如有个按钮的Name为button1,则必须该按钮的Click函数为 private void button1_Click(object sender, EventArgs e),否则用户单击的时候将不会产生任何响应。 (2)对界面的安排和设置不合理,导致界面很乱,许多静态文本和按钮等混淆在一起,最终导致功能完善的不合理。最后查阅资料,了解到可以在Form中插入多个Panel面板或者是GroupBox分组框,将每个不同功能的控件,包括Label、TextBox、Button、RadioButtonComboBox等放在相同的Panel或者G
26、roupBox中,这样界面分配合理且有条理,不仅美观,对功能的实现也起到了一点帮助的作用。 (3)对ComboBox内的选项进行初始化的时候遇到了一些问题,因为我把Form的Load函数初始化Combox和在Combox中的Item初始化的时候都做了一遍,不仅浪费了代码和时间,有时还会导致冲突错误。解决方法很简单,两种方法取其一种就可以了,这里推荐直接在Item中添加选项,因为简单和全可视化操作,但是如果其中的选项要在数据库的表中查询,则必须使用Load方法的初始化其选项。 (4)实验完成后发现窗口的背景和所有控件的大小都不随窗口的大小改变而改变,即每当最大化窗口或者拉伸窗口的时候,控件并不随
27、着改变其大小,这样就会导致界面不美观。查了一下资料,有两种解决方案:第一,更改控件的Dock或Anchor的属性,使其可以随着窗口的变换而变换,即将Anchor设置为Top,Left,Bottom,Right或者将Dock设置为靠近上下左右四个方向停靠,试验了一下,果真可以,但是当窗口中控件很多的情况下,不仅一个一个设置很麻烦,而且当Anchor和Dock属性用多了以后,窗口拉伸的时候会出现不停的闪烁的现象,而且无法避免;第二,直接设置完成控件的大小后,设置其大小不可改变,这样只需要更改窗口的MaximizeBox为False,并将FormBorderStyle设置为FixedSingle即可
28、,这样既方便又有效限制了用户的操作规范,不至于发生什么界面混乱的状况,但是不能随意修改大小某些时候也会有些限制;所以,这里我们仅采用第二种做法。2)关于数据库:(1)往表中插入数据,只能每次插入一条记录吗?最终答案:是的,在SQL Server中,用INSERT VALUES 每次只能插入一条记录。(2)对定义了外键的表插入数据时,例如对Reports表插入元组时,总是说插入错误。最终解决:在表中定义了外键之后,对表进行插入时,要注意数据与被引用表中的一致性。要插入的元组中,属于外键的数据必须是在被引用表中存在的。例如:在Reports中定义Sno为外键,参照表Students中的Sno。那么
29、在Reports表中要插入(S88,T02,C01,88)时,如果Students表中没有“S88”这条记录,那么插入失败。另外,如果这些规定都符合了,但插入语句VALUES()括号里的各字段值顺序跟表中的顺序不一致,也会出现同样的错误提示。(3)在SQL语句的末尾都可以加分号“;”,但是为什么在创建视图的语句后面加了分号会报错?最终解决:在SQL Server 2000中,查询分析器中的语句规则是,各条语句后面不用加任何标点符号。但鉴于人们的使用习惯,基本上允许在每条语句的后面加上“;”。个别语句可能会有影响。另外也可以用“GO”来隔开各条语句。它的意义在于告诉系统,在两个“GO”之间的语句作为一批去处理。(4)为何建了新的用户,却登录不了?最终解决:建立管理员账号(如sa)时,若定义为以WINDOWS验证登录。而建立其它用户,如USER1时,定义为WINDOWS+SQL验证登录。这样USER1无法登录。只有将sa登录方式改为以WINDOWS+SQL验证登录之后,方可以USER1登录。若不改S
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1