Javaweb梳理8——数据库设计

Javaweb梳理8——数据库设计

  • 8 数据库设计
  • 8.1 数据库设计简介
  • 8.2 表关系(一对多)
  • 8.3 表关系(多对多)
  • 8.4 表关系(一对一)

8 数据库设计

8.1 数据库设计简介

  • 软件的研发步骤
    在这里插入图片描述
  • 数据库设计概念
    • 数据库设计就是根据业务系统的具体需求,结合我们所选用的DMBS,为这个业务系统构造出最优的数据存储模型
    • 建立数据库中的表结构以及表与表之间的关联关系的过程。
    • 有哪些表?表里有哪些字段?表与表之间有什么关系?
  • 数据库设计的步骤
    • 需求分析(数据是什么?数据具有哪些属性?数据与属性的特点是什么?)
    • 逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
      如下图就是ER(Enitity/Relation)图:
      在这里插入图片描述
    • 物理设计(根据数据库自身的特点把逻辑设计转化为物理设计)
    • 维护设计(1.对新的需求进行建表;2.表优化)
  • 表关系
    • 一对一
      • 如:用户和用户详情
      • 一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能。
        在这里插入图片描述
        上图左边是用户的详细信息,而我们真正在展示用户信息时最长用的则是上图右边红框所示,所以我们会将详细信息查分成两周那个表。
    • 一对多
      • 如:部门和员工
      • 一个部门对应多个员工,一个员工对应一个部门。如下图:
        在这里插入图片描述
    • 多对多
      • 如:商品和订单
      • 一个商品对应多个订单,一个订单对应多个商品。如下图。
        在这里插入图片描述

8.2 表关系(一对多)

  • 一对多
    • 如:部门和员工
    • 一个部门对应多个员工,一个员工对应一个部门
  • 实现方式
    在多的一方建立外键,指向一的一方的主键
  • 案例
    我们还是以员工表·和部门表为例
    在这里插入图片描述
    经过分析发现,员工表属于多的一方,而部门表属于一的一方,此时我们会在员工表中添加一列(dep_id),指向于部门表的主键(id):
    在这里插入图片描述
    建表语句如下:
DROP TABLE IF EXISTS tb_emp;
DROP TABLE IF EXISTS tb_dept;

--部门表
CREATE TABLE tb_dept(
	id INT 
)

在这里插入图片描述

8.3 表关系(多对多)

  • 多对多
    • 如:商品和订单
    • 一个商品对应多个订单,一个订单包含多个商品
  • 实现方式
  • 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
    在这里插入图片描述
    经过分析发现,订单表和商品表都属于多的一方,此时需要创建一个中间表,在中间表中添加订单表的外键和商品表的外键指向两张表的主键:
    在这里插入图片描述
    建表语句如下:
-- 删除表
DROP TABLE IF EXISTS tb_order_goods;
DROP TABLE IF EXISTS tb_order;
DROP TABLE IF EXISTS tb_goods;

-- 订单表
CREATE TABLE tb_order(
	id INT PRIMARY KEY AUTO_INCREMENT,
	payment DOUBLE(10,2),
	payment_type TINYINT,
	`status` TINYINT
);

-- 商品表
CREATE TABLE tb_goods(
	id INT PRIMARY KEY AUTO_INCREMENT,
	title VARCHAR(100),
	price DOUBLE(10,2)
);

-- 订单商品中间表
CREATE TABLE tb_order_goods(
	id INT PRIMARY KEY AUTO_INCREMENT,
	order_id INT,
	goods_id INT,
	count INT
);

-- 建完表后,添加外键
ALTER TABLE tb_order_goods add CONSTRAINT fk_order_id FOREIGN KEY(order_id)REFERENCES tb_order(id);
ALTER TABLE tb_order_goods add CONSTRAINT fk_goods_id FOREIGN KEY(goods_id) REFERENCES tb_goods(id);

在这里插入图片描述

8.4 表关系(一对一)

  • 一对一
    • 如:用户和用户详情
    • 一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表
  • 实现方式
    在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)
  • 案例

我们以用户表举例
在这里插入图片描述
而在真正使用过程中发现 id、photo、nickname、age、gender 字段比较常用,此时就可以将这张表查分成两张表。
在这里插入图片描述建表语句如下:

DROP TABLE IF EXISTS tb_user;
DROP TABLE IF EXISTS tb_user_desc;
CREATE TABLE tb_user_desc(
	id INT PRIMARY KEY AUTO_INCREMENT,
	city VARCHAR(20),
	edu VARCHAR(10),
	income INT,
	status char(2),
	des VARCHAR(100)
);

CREATE TABLE tb_user(
	id INT PRIMARY KEY AUTO_INCREMENT,
	photo VARCHAR(100),
	nickname VARCHAR(50),
	age INT,
	gender CHAR(1),
	desc_id INT UNIQUE,
	
	-- 添加外键
	CONSTRAINT fk_user_desc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id)
)	

查看表结构模型图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/906036.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Edge 浏览器插件开发:图片切割插件

Edge 浏览器插件开发:图片切割插件 在图片处理领域,按比例切割图片是一个常见需求。本文将带你开发一个 Edge 浏览器插件,用于将用户上传的图片分割成 4 个部分并自动下载到本地。同时,本文介绍如何使用 cursor 辅助工具来更高效…

QT QPainter 绘图

QT QPainter 绘图 一、基本绘图类: Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 QPainter 用于执行绘图操作,其提供的 API 在…

【C++】位图详解(一文彻底搞懂位图的使用方法与底层原理)

目录 1.位图的概念 2.位图的使用方法 定义与创建 设置和清除 位访问和检查 转换为其他格式 3.位图的使用场景 1.快速的查找某个数据是否在一个集合中 2.排序去重 3.求两个集合的交集和并集 4.位图的底层实现 私有成员定义与初始化 set和reset的实现 前面的博客我们…

在线教育系统源码开发详解:网校培训平台搭建的核心技术

本篇文章,笔者将详细介绍在线教育系统源码的开发过程,重点聚焦网校培训平台搭建的核心技术,以期为有意从事在线教育行业的开发者提供实用的参考。 一、在线教育系统的构成 前端负责用户的交互体验,后端处理业务逻辑,…

qt QPalette详解

1、概述 QPalette是Qt框架中用于管理颜色组和角色的一种机制。它允许开发者为应用程序中的不同组件(如窗口、按钮、文本框等)定义一套统一的颜色方案。QPalette通过定义颜色角色(如背景色、前景色、选择色等)和颜色组&#xff08…

Java基本语法和基础数据类型——针对实习面试

目录 Java基本语法和基础数据类型标识符和关键字有什么区别?Java关键字有哪些?Java基本数据类型有哪些?什么是自动装箱和拆箱?自动装箱(Autoboxing)自动拆箱(Unboxing) 自动装箱和拆…

逻辑磁盘管理 附实验:逻辑卷的组成与划分

分区类型: 1、系统引导分区 就是存放系统的引导文件和Linux的内核文件 2、swap分区 交换分区,系统的物理内存不足时,从一些长时间未运行的程序当中释放一部分内存释放出来的保存到swap分区,这些未运行的程序一旦运行还要从swap空…

fetch: 取消请求、读取流、获取下载进度...

引言 Fetch API 提供了一个获取资源的接口(包括跨网络通信)。对于任何使用过 XMLHttpRequest 的开发者来说, 对于 Fetch 应该都能轻松上手, 而且新的 API 提供了更强大和灵活的功能集… 本文主要就是记录下, 在使用 Fetch 期间可能会碰到的几个小案例… 一、取消请求 在前端…

【 纷享销客-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

mobaxterm 中文输入问号解决办法

无论是终端,还是session的name,输入中文都是问号,那么使用以下方法可解决问题 语言设置中找到英文键盘删除即可

Hive的数据存储格式

目录 一、前言 二、存储格式 2.1、文本格式(TextFile) 2.1.1、定义与特点 2.1.2、存储与压缩 2. 1.3、使用场景 2.2、行列式文件(ORCFile) 2.2.1、ORC的结构 2.2.2、ORC的数据类型 2.2.3、ORC的压缩格式 2.2.3、ORC存储…

Spring Boot的核心优势及其应用详解

目录 前言1. Spring Boot的核心优势1.1 启动依赖的集成1.2 自动化配置 2. 内嵌服务器支持2.1 内嵌Tomcat服务器2.2 独立运行与便捷部署 3. 外部配置管理3.1 多环境支持3.2 配置优先级与外部化配置 4. Spring Boot的应用场景4.1 微服务架构4.2 云原生应用 结语 前言 在现代的Ja…

scala---10.30

val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…

ubuntu22.04 docker-compose搭建apisix高可用

首先你得先确保每台主机安装了docker和docker-compose 3台主机 没有安装docker和docker-compose的可以看我前两篇博客 可以先克隆仓库 git clone https://github.com/apache/apisix-docker.git 进入example目录 拷贝dashboard配置文件 将all-in-one中apisix-dashboard文件夹拷…

北大计算机考研难度如何?毕业后就业情况怎么样?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 一、总体情况概述 北京大学计算机 2024 届考研整体呈现 “稳中有升” 的态势。在复试分数线方面,无论是学硕(本部)还是专硕(深圳),较 2023 届均有…

黑马JavaWeb-day04

文章目录 mavenmaven 简介maven 安装IDEA集成maven创建maven项目Maven 坐标依赖管理单元测试 Web入门Springboot 入门HTTP协议三层架构分层解耦 I O C & D I IOC\&DI IOC&DI入门 I O C IOC IOC和 D I DI DI详解 maven maven 简介 maven: M a v e n Maven Maven是…

什么是FUSE用户态文件系统

零. 文件系统 1. 为什么要有文件系统 文件系统是操作系统中管理文件和目录的一种机制。它提供了组织、存储、检索和更新文件的方法,主要如下: 数据组织:文件系统将数据组织成文件和目录,使用户能够更方便地管理和查找文件。每个…

品牌怎么找到用户发的优质内容,进行加热、复制?

在,相对传统媒体来说,社交媒体营销具有更高的成本效益。品牌可以通过相对较低的成本达到大量潜在客户,尤其是通过口碑营销和内容分享,可以实现倍增的传播效果。在社媒营销的过程中,去找到与品牌有关的优质、正向内容&a…

梁山派入门指南3——串口使用详解,包括串口发送数据、重定向、中断接收不定长数据、DMA+串口接收不定长数据,以及对应的bsp文件和使用示例

梁山派入门指南3——串口使用详解,包括串口发送数据、重定向、中断接收不定长数据、DMA串口接收不定长数据,以及对应的bsp文件和使用示例 1. 串口发送数据1.1 串口简介1.2 梁山派上的串口开发1.3 bsp_uart文件(只发送不接收,兼容串…

notepad++ compare插件的离线下载和安装

一、离线安装 去改地址找到最新的插件:https://github.com/notepad-plus-plus/nppPluginList/blob/master/doc/plugin_list_x64.md下载之后复制到插件文件夹,插件文件夹的打开方式如下 注意目录: 二、问题汇总 (1&#xff09…