在计算机毕业设计中,很多同学会选择做管理系统,在论文中数据建模画ER图时,很多同学会忘记ER图的功能,出现一个误区:
例如,小萍同学做了一个新闻管理系统,系统中有用户管理、角色管理、文章管理、文章类型管理,系统管理员用户可以对用户、角色、文章以及文章类型进行增删改查的操作。于是小萍同学想到每个系统管理员用户可以管理多个用户、多个角色、多个文章、多个文章类型,而每个用户、角色、文章和文章类型能被多个系统管理员用户管理,那么系统管理员用户与用户、角色、文章、文章类型是多对多的关系。于是小萍画了以下的ER图:
乍一看,小萍画的图好像没有什么问题,但是她设计的数据库只有用户表、角色表、文章表、文章类型表共四张表。对标题理解的同学或许已经发现小萍同学缺少了四张表了。
首先我们回顾一下ER图的三个关系:一对一,一对多,多对多。
(1) 一对一联系(1 ∶1)
对于两个实体集A和B,若A中的每一个值在B中至多有一个实体值与之对应,反之亦然,则称实体集A和B具有一对一的联系。
一个学校只有一个正校长,而一个校长只在一个学校中任职,则学校与校长之间具有一对一联系。
(2) 一对多联系(1 ∶N)
对于两个实体集A和B,若A中的每一个值在B中有多个实体值与之对应,反之B中每一个实体值在A中至多有一个实体值与之对应,则称实体集A和B具有一对多的联系。
例如,某校教师与课程之间存在一对多的联系"教",即每位教师可以教多门课程,但是每门课程只能由一位教师来教。一个专业中有若干名学生,而每个学生只在一个专业中学习,则专业与学生之间具有一对多联系
(3) 多对多联系(M ∶N)
对于两个实体集A和B,若A中每一个实体值在B中有多个实体值与之对应,反之亦然,则称实体集A与实体集B具有多对多联系
例如,表示学生与课程间的联系"选修 "是多对多的,即一个学生可以学多门课程,而每门课程可以有多个学生来学。联系也可能有属性。例如,学生" 选修" 某门课程所取得的成绩,既不是学生的属性也不是课程的属性。由于" 成绩" 既依赖于某名特定的学生又依赖于某门特定的课程,所以它是学生与课程之间的联系" 选修"的属性。
实际上,一对一联系是一对多联系的特例,而一对多联系又是多对多联系的特例。 联系是随着数据库语义而改变的,假如有如下3种语义规定:
例如,一个部门有一个经理,而每个经理只在一个部门任职,则部门与经理的联系是一对一的。
一个员工可以同时是多个部门的经理,而一个部门只能有一个经理,则这种规定下"员工"与"部门"之间的"管理"联系就是1:n的联系了。
一个员工可以同时在多个部门工作,而一个部门有多个员工在其中工作,则"员工"与"部门"的"工作"联系为m:n联系。
ER图转化为数据库表注意的事项:
(1)一对多的关系中,要在“多”的实体的数据库表中引入“一”的实体的数据库表的主键当作外键。
(2)多对多的关系中,要产生一个新的数据库表存储多对多双方的主键当作外键。
小萍的新闻管理系统的ER图缺少了什么表呢?
按小萍对系统的解读的话,那么有四个多对多的关系,那么数据库表除了用户表、角色表、文章表和文章类型表,还应该有系统管理员用户管理用户表、系统管理员用户管理角色表、系统管理员用户管理文章表、系统管理员用户管理文章类型表。这时,小萍说:“这四张表在系统中没有用,我不想要。但是按我的理解就是多对多的关系呀。”
这就回到了标题所讲的,ER图表示的是数据关系,而不是业务关系。如果你认为是多对多的关系请看ER图转化为数据库表注意的事项。