概念模型

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描述的清晰的,尤其是在多对多的描述上。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值