IT培训网 - IT职场人学IT技术上IT培训网
再议java数据库概念模型设计何其妙
时间:2018-09-13 16:11:09 来源:编程网 作者:IT培训网 已有:名学员访问该课程
数据库概念模型设计是java语言中的一个要点,数据概念模型设计也是一个难点,无论之前会与否,在此,IT培训网老师再次强调分析一下。
概念模型
概念模型是对真实世界中问题域内的事物的描述,不是对软件设计的描述。当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。例如部门、员工都是系统中的实体。概念模型中的实体最终会成为Java中的类、数据库中的表。今天我们需要了解的概念模型包括以下两个:
对象模型:针对java中的实体类,例如我们之前学习的domain层中的User类等;
关系模型:对应数据库中的表。
在java中有以下三个关系描述:
is a:例如猫是动物,表示继承关系;
has a:例如人有两只手,表示的是类与成员的关系;
use a:表示类与方法之间的关系;
今天主要关注的是第二个关系:类与成员的关系。这种关联关系可以分为如下三种:
一对一关联:例如老公和老婆就是一对一的关系,一个老公只能有一个老婆,而一个老婆只能有一个老公;
一对多关联:例如每个员工都从属一个部门,而一个部门可以有多个员工,其中员工是多方,而部门是一方,从部门角度来说就是一对多,而从员工角度来说就是多对一;
多对多关联:老师与学生的关系就是多对多,一个老师可以有多个学生,一个学生可以有多个老师。
概念模型在java中对应这实体类,在实体类中使用成员变量完成关联关系,而且一般都是双向关联,以下是java中实体类与成员之间的关联关系,如下所示:
一对多:部门与员工之间是一对多的关系
classEmployee {//多方关联一方
...
private Department department;//在员工类中关联部门类
}
class Department {//一方关联多方
...
privateList<Employee> employees; //在部门类中关联员工类
}
一对一:丈夫与妻子之间是一对一的关系
class Husband {//一方关联一方
...
private Wife wife; //在丈夫类中关联妻子类
}
class Wife {//一方关联一方
...
private Husband husband; //在妻子类中关联丈夫类
}
多对多:学生与老师之间是多对多关系
class Student {//多方关联多方
...
private List<Teacher> teachers; //在学生类中关联教师类
}
class Teacher {//多方关联多方
...
private List<Student> students; //在教师类中关联学生类
}
由以上的关系可以看出,关联一方时成员就是一方对象,而关联多方时成员就是多方对象的集合。
外键约束
概念模型在数据库中就对应数据表,那么表与表之间的关系也包括:一对一,一对多,多对多。而表与表之间关系是通过外键来维护的。
一个表的外键是另一个表或它本身的主键,如图1-1所示:
图1-1 emp表
在emp表中有两个外键,分别是mgr、deptno,其中mgr代表的是员工的上级编码,它引用的是emp表的主键empno,因为员工的上级也是员工,所以上级的编号一定是emp表的主键;而deptno是dept表即部门表的主键,由图1-1可以发现,emp表中deptno列的值有重复的,表明部门是一方,员工是多方。
外键约束特性如下:
外键必须是另一表或自身表的主键的值;
外键可以重复;
外键可以为空;
一张表中可以有多个外键。
我们来查看一下部门表,如图1-2所示:
图1-2 dept表
图1-2中,部门表的主键值包括:10、20、30、40,emp表中的deptno列的值引用了dept表的deptno列的值,而图1-1中,emp表的最后一条记录,名为张三的部门编号是50,这显然不符合外键约束的要求,因为在emp表中没有设置外键约束因此才没有报错。后面我们会学习如何设置外键约束。
外键值可以重复,对于emp表来说,一个部门中有多个员工,那么emp表中一定有多个员工的deptno列的值是相同的。
外键值可以为null,emp表中的一条记录还没有与dept表建立关联时,该条记录的外键值可以为null。
由以上可以发现,在对象模型中,两个实体的关联是通过在各个实体中引用关联实体对象体现的,而在数据库表中表与表的关联是通过一个字段关联的。
如果表之间建立了关联关系,会有如图1-3所示的效果:
图1-3 表与表的关系
图1-3中,book表中的cid是外键,引用自category表中的cid主键;orderitem表中的bid是外键,引用自book表的主键bid,oid也是外键,引用的是orders表中的oid主键;orders表中的uid是外键,引用自user表中的主键uid。这些表与表之间的关系,就可以通过上图很清楚的体现出来。
每期开班座位有限.0元试听抢座开始!
温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。