Java培训之数据库概念模型设计

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所示:
Java培训之数据库概念模型设计
图1-1 emp表
在emp表中有两个外键,分别是mgr、deptno,其中mgr代表的是员工的上级编码,它引用的是emp表的主键empno,因为员工的上级也是员工,所以上级的编号一定是emp表的主键;而deptno是dept表即部门表的主键,由图1-1可以发现,emp表中deptno列的值有重复的,表明部门是一方,员工是多方。
外键约束特性如下:

  • 外键必须是另一表或自身表的主键的值;
  • 外键可以重复;
  • 外键可以为空;
  • 一张表中可以有多个外键。

我们来查看一下部门表,如图1-2所示:
Java培训之数据库概念模型设计
图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培训之数据库概念模型设计
图1-3 表与表的关系
图1-3中,book表中的cid是外键,引用自category表中的cid主键;orderitem表中的bid是外键,引用自book表的主键bid,oid也是外键,引用的是orders表中的oid主键;orders表中的uid是外键,引用自user表中的主键uid。这些表与表之间的关系,就可以通过上图很清楚的体现出来。





原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/253120.html

(0)
上一篇 2022年5月7日
下一篇 2022年5月7日

相关推荐

发表回复

登录后才能评论