1.概念模型
概念模型是对真实世界中问题域内的事物的描述,不是对软件设计的描述。当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。例如部门、员工都是系统中的实体。概念模型中的实体最终会成为Java中的类、数据库中的表。今天我们需要了解的概念模型包括以下两个:
- 对象模型:针对java中的实体类,例如我们之前学习的domain层中的User类等;
- 关系模型:对应数据库中的表。
在java中有以下三个关系描述:
- is a:例如猫是动物,表示继承关系;
- has a:例如人有两只手,表示的是类与成员的关系;
- use a:表示类与方法之间的关系;
我们今天主要关注的是第二个关系:类与成员的关系。这种关联关系可以分为如下三种:
- 一对一关联:例如老公和老婆就是一对一的关系,一个老公只能有一个老婆,而一个老婆只能有一个老公;
- 一对多关联:例如每个员工都从属一个部门,而一个部门可以有多个员工,其中员工是多方,而部门是一方,从部门角度来说就是一对多,而从员工角度来说就是多对一;
- 多对多关联:老师与学生的关系就是多对多,一个老师可以有多个学生,一个学生可以有多个老师。
概念模型在java中对应这实体类,在实体类中使用成员变量完成关联关系,而且一般都是双向关联,以下是java中实体类与成员之间的关联关系,如下所示:
class Employee {//多方关联一方
...
private Department department;//在员工类中关联部门类
}
class Department {//一方关联多方
...
private List<Employee> employees; //在部门类中关联员工类
} |
class Husband {//一方关联一方
...
private Wife wife; //在丈夫类中关联妻子类
}
class Wife {//一方关联一方
...
private Husband husband; //在妻子类中关联丈夫类
} |
class Student {//多方关联多方
...
private List<Teacher> teachers; //在学生类中关联教师类
}
class Teacher {//多方关联多方
...
private List<Student> students; //在教师类中关联学生类
} |
由以上的关系可以看出,关联一方时成员就是一方对象,而关联多方时成员就是多方对象的集合。
2.外键约束
概念模型在数据库中就对应数据表,那么表与表之间的关系也包括:一对一,一对多,多对多。而表与表之间关系是通过外键来维护的。
一个表的外键是另一个表或它本身的主键,如图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。这些表与表之间的关系,就可以通过上图很清楚的体现出来。
本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee