数据库建模

前置知识

  • 一对多解决方案,多的一方增加一个外键
  • 一对一解决方案,任何一方增加一个外键,并指定为唯一键。或者其中一方将其设置为主键and外键对应
  • 多对多解决方案,需要一个中间表

使用PowerDesigner数据库建模设计

一对多CDM概念数据模型设计

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

PowerDesigner将不同的模型进行转换

在PowerDesigner中设置外键,唯一键

  • 设置外键

    • 需要先进行关联关系的线连接。

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

    • 设置关联关系

  • 设置唯一键
    • 先将该键定义为一个key

    • 然后选中unique

通过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系列的更多相关文章

  1. spring框架的学习->从零开始学JAVA系列

    目录 Spring框架的学习 框架的概念 框架的使用 Spring框架的引入 概念 作用 内容 SpringIOC的学习 概念 作用 基本使用流程 SpringIOC创建对象的三种方式 通过构造器方式 ...

  2. JAVAWEB过滤器、监听器的作用及使用>从零开始学JAVA系列

    目录 JAVAWEB过滤器.拦截器的作用及使用 过滤器Filter 什么是过滤器 为什么要使用过滤器(过滤器所能解决的问题) 配置一个过滤器完成编码的过滤 编写一个EncodingFilter(名称自 ...

  3. JSP的执行原理、JSP的内置对象、四大作用域解析、MVC模式理解>从零开始学JAVA系列

    目录 JSP的执行原理.JSP的内置对象.四大作用域解析.MVC模式理解 JSP的执行原理 这里拿一个小例子来解析JSP是如何被访问到的 首先将该项目部署到tomcat,并且通过tomcat启动 通过 ...

  4. Session与Cookie的原理以及使用小案例>从零开始学JAVA系列

    目录 Session与Cookie的原理以及使用小案例 Cookie和Session所解决的问题 Session与Cookie的原理 Cookie的原理 Cookie的失效时机 小提示 Session ...

  5. JAVAWEB - Servlet原理及其使用>从零开始学JAVA系列

    目录 Servlet原理及其使用 什么是Servlet Servlet的使用 编写一个Servlet,使用继承HttpServlet的方式 配置web.xml 很简单的几个JSP文件 小提示,如果继承 ...

  6. JAVAWEB的基本入门(JSP、Tomcat)>从零开始学JAVA系列

    目录 JAVAWEB的基本入门(JSP.Tomcat) 使用idea创建web项目的两种方式 1.直接创建一个web项目(这样创建好的项目可以直接运行) 2.创建一个普通的java项目并配置web模块 ...

  7. JAVA数组的基础入门>从零开始学java系列

    目录 JAVA数组的基础入门 什么是数组,什么情况下使用数组 数组的创建方式 获取数组的数据 数组的内存模型 为什么数组查询修改快,而增删慢? 查询快的原因 增删慢的原因 数组的两种遍历方式以及区别 ...

  8. 进入mysql的学习>从零开始学JAVA系列

    目录 MySQL的学习 什么是MYSQL 安装MYSQL Window安装MYSQL(压缩包版) 什么是MYSQL 安装MYSQL Window安装MYSQL(压缩包版) MYSQL基本指令 DDL ...

  9. 冒泡排序、选择排序、直接插入排序、快速排序、折半查找>从零开始学JAVA系列

    目录 冒泡排序.选择排序.直接插入排序 冒泡排序 选择排序 选择排序与冒泡排序的注意事项 小案例,使用选择排序完成对对象的排序 直接插入排序(插入排序) 快速排序(比较排序中效率最高的一种排序) 折半 ...

随机推荐

  1. MySQL 为什么使用 B+ 树来作索引?

    什么是索引? 所谓的索引,就是帮助 MySQL 高效获取数据的排好序的数据结构.因此,根据索引的定义,构建索引其实就是数据排序的过程. 平时常见的索引数据结构有: 二叉树 红黑树 哈希表 B Tree ...

  2. Linux 安装及管理程序

    Linux 安装及管理程序 目录 一.Linux应用程序基础 1.1.应用程序与系统命令的关系 1.2.典型应用程序的目录结构 1.2.常见的软件包封装类型 二.RPM包管理工具 2.1.RPM软件包 ...

  3. Go语言深度比较值是否相等

    Go语言深度比较值是否相等 需求描述: 我们在开发过程中经常会遇到一些需要比较值是否相等的场景,例如比较两个数组.结构体.Map.等,自己写这些代码比较繁琐,大部分时候这里都可以使用到反射reflec ...

  4. 一次鞭辟入里的 Log4j2 异步日志输出阻塞问题的定位

    一次鞭辟入里的 Log4j2 日志输出阻塞问题的定位 问题现象 线上某个应用的某个实例突然出现某些次请求服务响应极慢的情况,有几次请求超过 60s 才返回,并且通过日志发现,服务线程并没有做什么很重的 ...

  5. 7、基本数据类型(tuple)

    7.1.tuple类: 1.元组元素用小括号括起来,用逗号分割每个元素,一般写元组的时候,推荐在最后加入逗号,该 逗号不占元素位置,目的是为了方便识别: tu = (111, "alex&q ...

  6. Python装饰器-给你的咖啡加点料

    今天你的咖啡加糖了吗? 让我们通过一个简单的例子来引出装饰器的概念及用法.在引出装饰器之前,我们先来了解一下函数的概念. 一.函数回顾 1.在python中函数是一等公民,函数也是对象.我们可以把函数 ...

  7. Java:Java的^运算符详解

    按位异或运算符(^)是二元运算符,要化为二进制才能进行计算,在两个操作数中,如果两个相应的位相同,则运算结果为0,否则1:例如:int a=15:int b=a^8;运算结果为:a=15:b=7:a( ...

  8. PHP大文件分片上传的实现方法

    一.前言 在网站开发中,经常会有上传文件的需求,有的文件size太大直接上传,经常会导致上传过程中耗时太久,大量占用带宽资源,因此有了分片上传. 分片上传主要是前端将一个较大的文件分成等分的几片,标识 ...

  9. STM32中STD、HAL、LL库比较

    ST为开发者提供了标准外设库(STD库).HAL库.LL库 三种.前两者都是常用的库,后面的LL库是ST新添加的,随HAL源码包一起提供,目前支持的芯片也偏少. 标准外设库(Standard Peri ...

  10. 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 ...