数据库建模、面向对象建模>从零开始学java系列
数据库建模
前置知识
- 一对多解决方案,多的一方增加一个外键
- 一对一解决方案,任何一方增加一个外键,并指定为唯一键。或者其中一方将其设置为主键and外键对应
- 多对多解决方案,需要一个中间表
使用PowerDesigner数据库建模设计
一对多CDM概念数据模型设计

多对多的PDM物理数据模型设计(针对mysql)

PowerDesigner将不同的模型进行转换

在PowerDesigner中设置外键,唯一键
- 设置外键
- 需要先进行关联关系的线连接。

- 设置该模型的需要设置文件的字段,设置为一个key

- 设置关联关系

- 需要先进行关联关系的线连接。
- 设置唯一键
- 先将该键定义为一个key

- 然后选中unique

- 先将该键定义为一个key
通过PDM 生成数据库SQL语句

逆向工程,将sql语句用来生成PDM物理数据模型

数据库建模的三大范式
第一范式
数据表的每一列都是不可分割项
修改前:用户表(姓名、联系方式),其中联系方式就是可以分割项
修改后:用户表(姓名、家庭电话、手机电话、紧急电话)
第二范式
数据表的非主键列都依赖于主键
修改前:学生表(学生id、学生姓名、课程id、课程名),其中的课程id与课程名与学生id没有依赖关系
修改后:
学生表(学生id、学生姓名)
课程表(课程id、课程名)
选课表(学生id、课程id)
第三范式
数据表的非主键列都依赖于主键,但是不存在传递依赖
修改前:学生表(学生id、学生姓名、班级id、班级名),其中的班级名不是直接依赖于学生id,直接依赖于班级id,对学生id只是一个间接依赖
修改后:
学生表(学生id、学生姓名、班级id)
班级表(班级id、班级名)
面向对象建模
类图Class Diagram(表示类与类之间的关系)

类图的六种关系
- 泛化关系(继承),实线空心箭头
- 实现关系,虚线空心箭头
- 依赖关系(被依赖的一方为依赖方的局部变量),虚线普通箭头
- 关联关系(被依赖的一方为依赖方的成员变量),实线普通箭头
- 聚合关系(特例的关联关系,联系较弱),依赖方为空心菱形、被依赖方为实线普通箭头
- 组合关系(特例的关联关系、联系较强(双方生命周期一致)),依赖方为实心菱形、被依赖方为实线普通箭头
泛化关系

实现关系

依赖关系

关联关系

聚合关系(特例关联关系,生命周期不同)

组合关系(特例关联关系,生命周期相同)

用例图(表示功能、权限)
图像规则
- 小人:参与者
- 椭圆:功能
- 泛化(继承):实线空心箭头
- 实线:关联关系
- extends:扩展
- include: 包含

时序图(表示执行细节)

数据库建模、面向对象建模>从零开始学java系列的更多相关文章
- spring框架的学习->从零开始学JAVA系列
目录 Spring框架的学习 框架的概念 框架的使用 Spring框架的引入 概念 作用 内容 SpringIOC的学习 概念 作用 基本使用流程 SpringIOC创建对象的三种方式 通过构造器方式 ...
- JAVAWEB过滤器、监听器的作用及使用>从零开始学JAVA系列
目录 JAVAWEB过滤器.拦截器的作用及使用 过滤器Filter 什么是过滤器 为什么要使用过滤器(过滤器所能解决的问题) 配置一个过滤器完成编码的过滤 编写一个EncodingFilter(名称自 ...
- JSP的执行原理、JSP的内置对象、四大作用域解析、MVC模式理解>从零开始学JAVA系列
目录 JSP的执行原理.JSP的内置对象.四大作用域解析.MVC模式理解 JSP的执行原理 这里拿一个小例子来解析JSP是如何被访问到的 首先将该项目部署到tomcat,并且通过tomcat启动 通过 ...
- Session与Cookie的原理以及使用小案例>从零开始学JAVA系列
目录 Session与Cookie的原理以及使用小案例 Cookie和Session所解决的问题 Session与Cookie的原理 Cookie的原理 Cookie的失效时机 小提示 Session ...
- JAVAWEB - Servlet原理及其使用>从零开始学JAVA系列
目录 Servlet原理及其使用 什么是Servlet Servlet的使用 编写一个Servlet,使用继承HttpServlet的方式 配置web.xml 很简单的几个JSP文件 小提示,如果继承 ...
- JAVAWEB的基本入门(JSP、Tomcat)>从零开始学JAVA系列
目录 JAVAWEB的基本入门(JSP.Tomcat) 使用idea创建web项目的两种方式 1.直接创建一个web项目(这样创建好的项目可以直接运行) 2.创建一个普通的java项目并配置web模块 ...
- JAVA数组的基础入门>从零开始学java系列
目录 JAVA数组的基础入门 什么是数组,什么情况下使用数组 数组的创建方式 获取数组的数据 数组的内存模型 为什么数组查询修改快,而增删慢? 查询快的原因 增删慢的原因 数组的两种遍历方式以及区别 ...
- 进入mysql的学习>从零开始学JAVA系列
目录 MySQL的学习 什么是MYSQL 安装MYSQL Window安装MYSQL(压缩包版) 什么是MYSQL 安装MYSQL Window安装MYSQL(压缩包版) MYSQL基本指令 DDL ...
- 冒泡排序、选择排序、直接插入排序、快速排序、折半查找>从零开始学JAVA系列
目录 冒泡排序.选择排序.直接插入排序 冒泡排序 选择排序 选择排序与冒泡排序的注意事项 小案例,使用选择排序完成对对象的排序 直接插入排序(插入排序) 快速排序(比较排序中效率最高的一种排序) 折半 ...
随机推荐
- MySQL 为什么使用 B+ 树来作索引?
什么是索引? 所谓的索引,就是帮助 MySQL 高效获取数据的排好序的数据结构.因此,根据索引的定义,构建索引其实就是数据排序的过程. 平时常见的索引数据结构有: 二叉树 红黑树 哈希表 B Tree ...
- Linux 安装及管理程序
Linux 安装及管理程序 目录 一.Linux应用程序基础 1.1.应用程序与系统命令的关系 1.2.典型应用程序的目录结构 1.2.常见的软件包封装类型 二.RPM包管理工具 2.1.RPM软件包 ...
- Go语言深度比较值是否相等
Go语言深度比较值是否相等 需求描述: 我们在开发过程中经常会遇到一些需要比较值是否相等的场景,例如比较两个数组.结构体.Map.等,自己写这些代码比较繁琐,大部分时候这里都可以使用到反射reflec ...
- 一次鞭辟入里的 Log4j2 异步日志输出阻塞问题的定位
一次鞭辟入里的 Log4j2 日志输出阻塞问题的定位 问题现象 线上某个应用的某个实例突然出现某些次请求服务响应极慢的情况,有几次请求超过 60s 才返回,并且通过日志发现,服务线程并没有做什么很重的 ...
- 7、基本数据类型(tuple)
7.1.tuple类: 1.元组元素用小括号括起来,用逗号分割每个元素,一般写元组的时候,推荐在最后加入逗号,该 逗号不占元素位置,目的是为了方便识别: tu = (111, "alex&q ...
- Python装饰器-给你的咖啡加点料
今天你的咖啡加糖了吗? 让我们通过一个简单的例子来引出装饰器的概念及用法.在引出装饰器之前,我们先来了解一下函数的概念. 一.函数回顾 1.在python中函数是一等公民,函数也是对象.我们可以把函数 ...
- Java:Java的^运算符详解
按位异或运算符(^)是二元运算符,要化为二进制才能进行计算,在两个操作数中,如果两个相应的位相同,则运算结果为0,否则1:例如:int a=15:int b=a^8;运算结果为:a=15:b=7:a( ...
- PHP大文件分片上传的实现方法
一.前言 在网站开发中,经常会有上传文件的需求,有的文件size太大直接上传,经常会导致上传过程中耗时太久,大量占用带宽资源,因此有了分片上传. 分片上传主要是前端将一个较大的文件分成等分的几片,标识 ...
- STM32中STD、HAL、LL库比较
ST为开发者提供了标准外设库(STD库).HAL库.LL库 三种.前两者都是常用的库,后面的LL库是ST新添加的,随HAL源码包一起提供,目前支持的芯片也偏少. 标准外设库(Standard Peri ...
- C语言:for语句原理及具体执行过程
#include <stdio.h> int main() { int i,s=0; for(i=1;;i*=2) { s=s+i; if(i%3==0) break; i=i+2; pr ...