概念模型

来源:互联网 发布:数据连接已断开连接 编辑:程序博客网 时间:2024/06/05 17:17

1、概念模型

  当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。概念模型在Java中称为实体类,实体类--是与数据库中的表对应的,一种orm(对象与关系的映射);实体类在Java中的体现形式就是javaBean(所以说javabean是实体类的一种)。
  类使用成员变量来完成关系,一般都是双向关联!例如部门、员工都是系统中的实体。概念模型中的实体最终会成为Java中的类、数据库中表。实体之间也存在着关系,关系有三种:一对多、多对多和一对一。

2、Java中的概念模型


   一对多:


    例如每个员工都从属一个部门,而一个部门可以有多个员工,其中员工是多方,而部门是一方,如下:

class Employee {//多方关联一方     ...     private Department department;  }  class Department {//一方关联多方     ...     private List<Employee> employees;  }


  ● 一对一:


    例如丈夫和妻子就是一对一的关系,一个丈夫只能有一个妻子,而一个妻子只能有一个丈夫,如下:

  class Husband {     ...     private Wife wife;  }  class Wife {     ...     private Husband;  }


  ● 多对多:


    老师与学生的关系就是多对多,一个老师可以有多个学生,一个学生可以有多个老师。

 class Student {     ...     private List<Teacher> teachers  }  class Teacher {     ...     private List<Student> students;  }


2、数据库中的概念模型


  数据库中的概念模型称为表,表之间的关系:


  ● 一对多:


    最为常见的就是一对多!一对多和多对一,这是从哪个角度去看得出来的。emp和dept的关系,从dept来看就是一对多,而从emp的角度来看就是多对一!这种情况都是在多方创建外键:

  /*部门表*/  create table dept (    deptno int  primary key,/*部门编号*/    ...  );  /*员工表*/  create talbe emp (    empno int primary key,    ...    deptno int,    CONSTRAINT fk_emp FOREIGN KEY(mgr) REFERENCES emp(empno)    );

   一对一:


    丈夫和妻子是一对一的关系,在表中建立一对一关系比较特殊,需要让其中一张表的主键,即是主键又是外键。如下:  

 create table husband(    hid int PRIMARY KEY,    ...  );  create table wife(    wid int PRIMARY KEY,    ...    ADD CONSTRAINT fk_wife_wid FOREIGN KEY(wid) REFERENCES husband(hid)  );

    其中wife表的wid即是主键,又是相对husband表的外键!husband.hid是主键,不能重复,wife.wid是主键,不能重复,又是外键,必须来自husband.hid。所以如果在wife表中有一条记录的wid为1,那么wife表中的其他记录的wid就不能再是1了,因为它是主键。同时在husband.hid中必须存在1这个值,因为wid是外键。这就完成了一对一关系。


  ● 多对多:


    例如t_stu和t_teacher表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系,即需要三张表,在中间表中使用两个外键,分别引用其他两个表的主键:

  create table student(    sid int PRIMARY KEY,    ...  );  create table teacher(    tid int PRIMARY KEY,    ...  );  create table stu_tea(    sid int,    tid int,    ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),    ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES teacher(tid)  );

    这时在stu_tea这个中间表中的每条记录都是来说明student和teacher表的关系,而两个外键都是可以重复的,这样就完成了多对多:

  sid    tid  101    201 /*编号为101的学生有一个编号为201的老师*/  101    202 /*编号为101的学生有一个编号为202的老师*/  102    201 /*编号为102的学生有一个编号为201的老师*/


  小结:概念模型是对真实世界中问题域内的事物的描述,可以发现表描述概念模型是没有javabean描述的清晰的,尤其是在多对多的描述上。


3 0
原创粉丝点击