当前位置 : 首页> 交流分享 > 再议java数据库概念模型设计何其妙

再议java数据库概念模型设计何其妙

时间:2018-09-13 16:11:09   已访问:899次
热门专业

数据库概念模型设计是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所示:

再议java数据库概念模型设计何其妙_www.cnitedu.cn

图1-1 emp表

在emp表中有两个外键,分别是mgr、deptno,其中mgr代表的是员工的上级编码,它引用的是emp表的主键empno,因为员工的上级也是员工,所以上级的编号一定是emp表的主键;而deptno是dept表即部门表的主键,由图1-1可以发现,emp表中deptno列的值有重复的,表明部门是一方,员工是多方。

外键约束特性如下:

外键必须是另一表或自身表的主键的值;

外键可以重复;

外键可以为空;

一张表中可以有多个外键。

我们来查看一下部门表,如图1-2所示:

再议java数据库概念模型设计何其妙_www.cnitedu.cn

图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所示的效果:

再议java数据库概念模型设计何其妙_www.cnitedu.cn

图1-3 表与表的关系

图1-3中,book表中的cid是外键,引用自category表中的cid主键;orderitem表中的bid是外键,引用自book表的主键bid,oid也是外键,引用的是orders表中的oid主键;orders表中的uid是外键,引用自user表中的主键uid。这些表与表之间的关系,就可以通过上图很清楚的体现出来。


推荐内容