概述:
以小组项目中赛事活动系统中的赛事报名的例子:一个参赛者可以参加多个比赛,同时一个比赛也可以有多个参赛者参加,两者属于多对多的关系。而且参赛者与与比赛之间的关系和功能有:参赛者参加比赛,参赛者报名比赛,参加者获得比赛结果,参加者向比赛活动建议,参加者向比赛活动申诉等功能。比赛活动与地点之间为一对一关系,表示比赛需要申请场地。
E-R图:
图1 赛事活动E-R图
说明:
参赛者参加表连接用户表与赛事活动表,表示身份为参赛者的用户参加比赛,额外属性为:参加小组,参加时间,比赛轮次。
报名表连接用户表与赛事活动表,表示身份为参赛者的用户报名比赛,报名表的属性为报名状态,表示是否通过。
比赛结果表连接用户表与赛事活动表,表示身份为参赛者的用户报名的比赛分数,其属性为分数,表示比赛结果获得的分数。
建议表连接用户表与赛事活动表,表示身份为参赛者的用户为赛事获得提建议,建议表的额外属性为建议内容。
申诉表连接用户表与赛事活动表,表示身份为参赛者的用户为赛事获得提出申诉,建议表的额外属性为申诉内容。
地点表与赛事活动表1对1,表示申请地点功能。
项目类图:
图2 赛事活动类图
类图说明:
User(id,sno,name,sex,account,password,identity,phone)
表示:用户(id,学号,姓名,账号,密码,身份,电话)
Activity(id,actname,type,actime,place,state,content,power)
表示:赛事活动(id,赛事活动名,赛事活动类型,赛事活动地点,赛事活动状态,评论,审核状态)
Particpantlist(id,scid,sid,G_group,ptime,place,round)
表示:参加表(id,赛事活动id,学生id,组别,时间,地点,轮次)
Resulet(id,score,acid,sid,mark)
表示:结果表(id,分数,赛事活动id,学生id,排名)
Advice(id,acid,sid,content)
表示:建议表(id,赛事活动id,学生id,建议内容)
Complain(id,acid,sid,content)
表示:建议表(id,赛事活动id,学生id,申诉内容)
Place(id,palce,is_Have)
表示:地点(id,地名,占用状态)
总结:
多对多关系连接表需要提供中间表,连接方式有物理连接和逻辑连接。物理连接是指且中间表要把两个被连接的表的主键作为外键,在数据库中添加物理层面上的外键约束,缺点是可能效率会降低和一些情况会出错。另一种就是在业务层用编写的代码从逻辑上完成约束,上述表格没有设计外键用的就是逻辑约束。实际开发中更偏向后者的约束方式。