概念模型
2016-01-09 12:26
375 查看
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描述的清晰的,尤其是在多对多的描述上。
相关文章推荐
- SQL Server数据库中bit字段类型使用时的注意事项
- 10月24日作业
- 优雅(简单粗暴)的使用AndroidStudio
- jcaptcha组件小小改造解决Invalid ID, could not validate unexisting or already validated captcha
- 如何创建iOS环境下的cordova插件,让其运用到iOS项目中
- python图片旋转
- Ruby学习之概述
- python + eclipse + pydev 安装、配置
- data URI scheme及其应用
- 【重磅】移动网络性能揭秘(下)--网络协议及性能提升实践
- 2015苏州大学ACM-ICPC集训队选拔赛(2) 1001 1003 1010
- Maven-clover2-plugin
- cxf发布webservice 服务
- sunxi分区那些事儿
- win7升级到win10正式版后怎么再重新返回win7系统?
- MFC 动态创建控件
- [cocos2dx]我的学习记录
- C++头文件保护符和变量的声明定义
- java7新特性介绍
- MyEclipse/Eclipse安装插件的几种方式