Java技能: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所示:
图1-1 emp表
在emp表中有两个外键,分别是mgr、deptno,其中mgr代表的是员工的上级编码,它引用的是emp表的主键empno,因为员工的上级也是员工,所以上级的编号一定是emp表的主键;而deptno是dept表即部门表的主键,由图1-1可以发现,emp表中deptno列的值有重复的,表明部门是一方,员工是多方。
外键约束特性如下:
- 外键必须是另一表或自身表的主键的值;
- 外键可以重复;
- 外键可以为空;
- 一张表中可以有多个外键。
我们来查看一下部门表,如图1-2所示:
图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所示的效果:
图1-3 表与表的关系
图1-3中,book表中的cid是外键,引用自category表中的cid主键;orderitem表中的bid是外键,引用自book表的主键bid,oid也是外键,引用的是orders表中的oid主键;orders表中的uid是外键,引用自user表中的主键uid。这些表与表之间的关系,就可以通过上图很清楚的体现出来。
Java技能:Java数据库概念模型设计相关推荐
- 最新2023基于微信小程序的社区小区团购电商在线商城平台(SSM+mysql)-JAVA.VUE【数据库设计、论文、毕设源码、开题报告】
摘 要 社会的发展和科学技术的进步,互联网技术越来越受欢迎.手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个会员的使用.手机具有便利性,速度快,效率高,成本低等优点. 因此,构建符合自己要求的操作系 ...
- 数据库系统需求分析、概念模型设计及逻辑结构设计——以“到梦空间”APP为例
"到梦空间"APP的数据库系统需求分析.概念模型设计及逻辑结构设计 1.需求分析 1.1 选定数据库设计对象 1.1.1 组织机构图 组织机构图 1.1.2 数据流图 数据流图 1 ...
- 学习Java大数据需要掌握哪些Java技能?
学习Java大数据需要掌握哪些Java技能?现在大数据发展很速度很多小伙伴想要学习Java大数据技术开发,但是学习大数据为什么需要掌握Java技能呢? 一.学大数据为什么要掌握Java? 首先,我们学 ...
- Springboot疫苗接种管理系统-JAVA.JSP【数据库设计、源码、开题报告】
摘 要 预防预接种工作实行网络信息化管理,是我国免疫规划工作发展的需要.接种信息实行网络信息化不仅是预防接种工作步入了一个新的台阶,更重要的是解决了多年疫苗接种过程种,免疫接种剂次不清,难以全程有效接 ...
- Java中的数据库架构导航
jOOQ的重要组成部分是数据库架构导航模块jooq-meta. 代码生成器使用它来发现相关的架构对象. 我多次被问到为什么我要自己滚动而不使用其他库,例如SchemaCrawler或SchemaSpy ...
- java day47【redis概念 、下载安装 、 命令操作 、持久化操作 、使用Java客户端操作redis】...
第一章 Redis 1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即"不仅仅是S ...
- Java面试:数据库,Java,框架,前端技术。应有尽有
** Java面试宝典 ** 一. HTML&CSS部分 1.HTML中定义表格的宽度用80px和80%的区别是什么? PX标识像素,%标识整个页面的宽度百分比 2.CSS样式定义优先级顺序是 ...
- 【java】Java连接mysql数据库及mysql驱动jar包下载和使用
文章目录 JDBC JDBC本质: JDBC作用: 跟数据库建立连接 发送 SQL 语句 返回处理结果 操作流程和具体的连接步骤如下: 操作步骤: 需要导入驱动jar包 mysql-connector ...
- jdbc(跟着宝哥学java:jdbc) jdbc概念,铁打步骤,jdbc封装,预编译对象,sql攻击
1 概念 jdbc:java database connection 通过java连接数据库 sun公司为java连接所有数据库提供的一组接口; jdbc驱动:各个数据库厂家为自己的数据库根据jdbc ...
最新文章
- 独家 | 微软与哈佛大学定量社会科学研究所合作开发开放数据差异隐私平台,开启研究新征程(附链接)...
- 修改MySql默认存储引擎为InnoDB,启动报错
- map/set iterator not dereferencable
- 头脑风暴是如何毁掉创意的?
- (归并排序 快排 堆)
- Your CPU supports instructions that this TensorFlow binary was not compiled to use AVX AVX2
- bsp的分析(其中使用buildroot文件夹建立rootfs)
- 凭什么说这门编程语言是下一代 Java?
- java栈与堆_JAVA中的栈和堆
- python 实例化过程_python实例化对象的具体方法
- eclipse 设置默认编码为Utf-8
- 知识付费的时代,我们如何应对:这8个干货,免费送给你!
- Linux打开关闭ping
- win10系统安装SQL Server2005中文版安装教程和下载地址(亲测成功)
- 三星Note3开发者模式
- unix编程艺术读书笔记
- ICCV 2021 | Transformer结合自监督学习!Facebook开源DINO
- Hourglass网络的理解和代码分析
- 关于身份证号或者手机号,密码 隐藏中间几位数字
- [Oracle 11g r2(11.2.0.4.0)]集群守护进程CSS资源管理