JavaWeb开发之——数据库设计(20)

news2024/9/20 10:38:18

一 概述

  • 数据库设计-简介
  • 数据库设计-多表关系实现
  • 数据库设计-案例

二 数据库设计-简介

2.1 软件的研发步骤

2.2 数据库设计概念

  • 数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS(Database Management System-数据库管理系统),为这个业务系统构造出最优的数据存储模 型。
  • 建立数据库中的表结构以及表与表之间的关联关系的过程。
  • 有哪些表?表里有哪些字段?表和表之间有什么关系?

2.3 数据库设计的步骤

  • 需求分析(数据是什么? 数据具有哪些属性? 数据与属性的特点是什么)
  • 逻辑分析(通过ER(Entity/Relation)图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
  • 物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
  • 维护设计(1.对新的需求进行建表;2.表优化)

2.4 表关系

一对一

  • 如:用户 和 用户详情
  • 一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升 查询性能

一对多

  • 如:部门 和 员工
  • 一个部门对应多个员工,一个员工对应一个部门。

多对多

  • 如:商品 和 订单
  • 一个商品对应多个订单,一个订单包含多个商品

三 数据库设计-多表关系实现

3.1 一对多表关系

实现方式

在多的一方建立外键,指向一的一方的主键

案例分析

员工表部门表举例

经过分析发现,员工表属于多的一方,而部门表属于少的一方,此时我们会在员工表中添加一列(dep_id),指向于部门表的主键(id)

建表语句

-- 删除表
DROP TABLE IF EXISTS tb_emp;
DROP TABLE IF EXISTS tb_dept;
-- 部门表
CREATE TABLE tb_dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
CREATE TABLE tb_emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES tb_dept(id)
);

查看表结构模型图

3.2 多对多表关系

实现方式

建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

案例分析

订单表商品表 举例

经过分析发现,订单表和商品表都属于多的一方,此时需要创建一个中间表,在中间表中添加订单表的外键和商品表的 外键指向两张表的主键:

建表语句

-- 删除表
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);

查看表结构模型图:

3.3 1对1表关系

实现方式

在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)

案例分析

用户表 举例

而在真正使用过程中发现 id、photo、nickname、age、gender 字段比较常用,此时就可以将这张表查分成两张表。

建表语句

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)
);

四 数据库设计-案例

4.1 描述对象

4.2 案例分析


经过分析,我们分为 专辑表 曲目表 短评表 用户表 4张表

  • 一个专辑可以有多个曲目,一个曲目只能属于某一张专辑,所以专辑表和曲目表的关系是一对多
  • 一个专辑可以被多个用户进行评论,一个用户可以对多个专辑进行评论,所以专辑表和用户表的关系是 多对多
  • 一个用户可以发多个短评,一个短评只能是某一个人发的,所以用户表和短评表的关系是 一对多

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运动哪种耳机好用,推荐五款适合运动的耳机分享

​经常佩戴耳机的小伙伴都知晓传统的蓝牙耳机相对于有线耳机来说比较方便,但也存在着耳道一直堵塞导致细菌的滋生等因素的存在,但在近些年火热的骨传导耳机却能够将这些问题一一化解,基本可以说是百利而无一害,所以今天我就给小伙…

第一章 计算机系统体系结构

1.1 什么是计算机体系结构 本章的第一个概念是计算机系统(computer system)。 计算机系统包括读取并执行程序的 中央处理单元(CPU, 保存程序和数据的存储器以及将芯片转换为实用系统的 其他子系统。 这些子系统会使CPU与显示器、打印机、Internet等外部设备之间的…

【优化求解】整数规划求解机票超售优化赔付问题【含Matlab源码 2182期】

⛄一、问题 A航空公司每天有6班航班从上海到北京,从上午10点到晚上8点,每两小时发一班航班。某天获知,前三班机每班可以容纳100名旅客,后三班机每班可以容纳150名旅客。如果某次航班超售,A航空公司可以把某预定了该次…

【JSP/Servlet】基于WEB的通讯录系统

巩固JSP/Servlet系统开发描述步骤系统功能描述一、创建一个登录页面二、模拟数据(用数据库模拟用户名和密码还有用户的通讯录)三、创建一个JDBC工具类四、判断在登录页面输入的用户名和密码是否正确五、利用cookie实现保存六、以表格形式显示出我的通讯录…

2022最新MySQL面试题-有详细完整的答案解析

MySQL专题面试题 MySQL中有哪些存储引擎? InnoDB存储引擎 InnoDB是MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期(short-lived)事务,应该优先考虑InnoDB引擎。 MylSAM存储引擎 在MySQL 5.1及之前的…

操作简单的BI数据分析软件有哪些?实际体验如何?

使用者没有IT基础,不懂代码,又需要对大量复杂的数据进行深度分析;分析效率要高;报表要直观易理解;最好能让每个浏览者都自己动手做分析。现在市面上,能够满足这些要求的BI数据分析软件有哪些?实…

一文速通MybatisPlus

目录 Mybatis-plus简介 MP特性 框架的结构 MP快速入门 配置日志输出 主键生成策略 自动填充 方式一:数据库级别 方式二:代码控制级别(常用) 乐观锁和悲观锁 测试乐观锁单线程成功的例子 乐观锁多线程失败案例 查询操作 分页查询 删除操作 删除…

C++ 手动实现单向循环链表(课后作业版)

单向循环链表&#xff0c;并实现增删查改等功能 首先定义节点类&#xff0c;类成员包含当前节点的值&#xff0c; 指向下一个节点的指针 循环链表的尾节点指向头节点 节点定义&#xff1a; //node definition template <typename T> class Node { public:T value;Nod…

Vue的生命周期快速入门

图示 流程 new Vue()实例化一个vue实例&#xff0c;然后init初始化event 和 lifecycle&#xff0c; 其实这个过程中分别调用了3个初始化函数&#xff08;initLifecycle(), initEvents(), initRender()&#xff09;&#xff0c;分别初始化了生命周期&#xff0c;事件以及定义cr…

k8s 资源管理及查看命令

关注 迪答数据 公众号获取更多 技术/数据 干货文章 文章传送门&#xff1a;数据治理之指标体系管理 管理容器的计算资源 参考文档&#xff1a; Kubernetes Managing Compute Resources for Containers(opens new window)https://kubernetes.io/docs/concepts/configuration/m…

go slice 扩容机制

前言 go语言没有ArrayList这样的封装&#xff0c;但是官方原生提供slice&#xff0c;底层就是数组存储&#xff0c;并且能自动扩容&#xff0c;相较于ArrayList的默认10&#xff0c;扩容5&#xff0c;slice的逻辑是有区别的。slice默认容量0。 demo go版本号 huahuaMac-min…

第一章 数据库绪论

数据库绪论 数据管理的三个阶段 人工管理阶段 文件系统阶段 数据库系统阶段 基本术语 数据&#xff08;Data&#xff09; 计算机用来描述事物的记录&#xff08;文字&#xff0e;图形&#xff0e;图像&#xff0e;声音&#xff09;数据的形式本身并不能完全表达其内容&a…

Transformer Fusion for Indoor RGB-D Semantic Segmentation

如何聚合多尺度特征这是一个问题&#xff0c;现有的方法大多通过卷积来实现&#xff0c;而很少在特征融合的地方使用长距离依赖&#xff0c;因此对于大物体的分割就会有挑战。本文提出基于transformer的融合策略&#xff0c;来更好的建模上下文。 TransD-Fusion包含①&#xff…

SpringBoot SpringBoot 开发实用篇 6 监控 6.4 info 端点指标控制

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.4 info 端点指标控制6.4.1 问题引入6.4.2 info 端点指标控制…

CleanMyMac4.12最新版mac系统内存空间清理教程

CleanMyMac X可以优化Mac系统。mac系统用久了&#xff0c;用CleanMyMac清理一下效果还不错。可用来清理系统的缓存、日志、语言和垃圾文件&#xff0c;还能卸载应用程序。 Mac是不需要安装任何杀毒软件的&#xff0c;虽然不用杀毒&#xff0c;但是日常的清理还是有必要的&#…

单机高性能网络模型

传统网络模型 PPC和prefork 优点 实现简单 缺点 PPC&#xff1a;fork代价高&#xff0c;性能低父子进程通信要用IPC&#xff0c;监控统计等实现会比较复杂OS的上下文切换会限制并发连接数&#xff0c;一般几百 案例 世界上第一个Web服务器CERN httpd采用PPC模式Apache MP…

简单网页制作代码 HTML+CSS+JavaScript香港美食(8页)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Spring 5有哪些新特性?这份spring5高级编程带你深入剖析,直击P8!

spring Spring 框架可以说是Java 世界最为成功的框架&#xff0c;在企业实际应用中&#xff0c;大部分的企业架构都基于Spring 框架。它的成功来自于理念&#xff0c;而不是技术&#xff0c;它最为核心的理念是IoC &#xff08;控制反转&#xff09;和AOP &#xff08;面向切面…

Flutter高仿微信-第28篇-好友详情-查看个人头像

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; /*** Author : wangning* Email : maoning20080809163.co…

Redis如何实现持久化(AOF、RDB、混合模式)的优缺点

&#x1f468;‍&#x1f4bb;个人主页&#xff1a; 才疏学浅的木子 &#x1f647;‍♂️ 本人也在学习阶段如若发现问题&#xff0c;请告知非常感谢 &#x1f647;‍♂️ &#x1f4d2; 本文来自专栏&#xff1a; Redis ❤️ 支持我&#xff1a;&#x1f44d;点赞 &#x1f33…