当前位置: 首页 > news >正文

MySQL数据分析进阶(十二)设计数据库——PART3

※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,笔记整理比较粗糙,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!)

【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!icon-default.png?t=N7T8https://www.bilibili.com/video/BV1UE41147KC/?spm_id_from=333.1007.0.0&vd_source=b287f1f4a1fa54cc438e31a0f87ef4e2

目录

第十二章:设计数据库——PART3

19、PROJECT(1):FLIGHT BOOKING SYSTEM——项目一航班订票系统

20、PROJECT(1):CONCEPTUAL MODEL——项目一:概念模型

21、PROJECT(1):LOGICAL MODEL——项目一:逻辑模型

22、PROJECT(2):VIDEO RENTAL APPLICATION——项目二:视频租赁应用

23、PROJECT(2):——CONCEPTUAL MODEL——项目二:概念模型

24、PROJECT(2):——LOGICAL MODEL——项目二:逻辑模型


第十二章:设计数据库——PART3

19、PROJECT(1):FLIGHT BOOKING SYSTEM——项目一航班订票系统

为航班订票系统设计一个数据库

在附件PDF中可以看到这个系统要生成的机票的一个示例

根据这些信息,为系统设计一个数据库

20、PROJECT(1):CONCEPTUAL MODEL——项目一:概念模型

自己做的:

Mosh答案:

先在实体之间建立一种关系,在逻辑模型的时候再明细它们的关系,都先设定为多对多

先不用管标准化问题,随时可以回来修改,先把基础建对

围绕四个实体建立概念模型

21、PROJECT(1):LOGICAL MODEL——项目一:逻辑模型

优化元素建立逻辑模型

①实体之间的关系

乘客&机票:一对多

机票&航班:一对多

机场&航班:多对多

修改箭头即可

②添加属性

Flight number有数字和字母,使用字符串

飞行时间最好用分钟来计时,更加直观——飞行分钟

③新增Ariline

航空公司&航班:一对多

舱位&机票:一对多

两个问题:

①机场实体

这种设计可能导致重复的城市、州、国家,是否应该把属性拎出来

减少重复但是数据会变得很零碎,也总需要把三四张表连接到一起,才能查到某个城市的机场,这样的连接会影响应用程序的性能

对设计作“去”标准化处理,将经常连接到一起的表,合并成一张表

就不必总是把表连接到一起

结合项目,世界也不会有几百万个机场,也不是每个城市也有机场,数量有限,这里出现的重复不算很大问题

只添加城市和州属性就可以

②机场&航班:多对多关系

关系型数据库中没有多对多关系,只有一对一、一对多

出现多对多的关系,要分解成2组一对多关系

通过一张链接表实现,一张代表两个实体或者两张表之间关系的表

但链接表的问题是:允许一个航班与两个以上的机场有联系。因为链接表可以有多对多的关系(不建议使用)

添加两个属性:起飞机场、到达机场

当我们基于这个逻辑模型建构一个实体模型时

需要为DepartureAirportId(interger)、ArrivalAirportId(interger)这两列添加外键

以上就是基于我们对这个问题的了解所做的逻辑模型,不要把它当作这类问题的最好办法或者唯一办法,每种解决方案都是有利有弊

随着越了解这个问题,这个业务领域,模型也会变

(实体模型自行建立)

22、PROJECT(2):VIDEO RENTAL APPLICATION——项目二:视频租赁应用

应用程序将在一个视频出租商店使用(Vidly)

使用附件PDF,阅读要求,为应用程序设计数据模型

 

①不同级别的权限给不同的用户:

商店经理:添加/更新/删除电影列表;设置每部电影的库存、每日租金

收银员:对电影清单有一个只读的视图,管理顾客名单、租的电影

②业务方面:

结账:顾客要一部或者多部电影,搜索电话号码查询顾客ID

第一次来的需要在系统中登记全名、电子邮件、电话号码;扫描所要电影,记录在系统中

每部电影有个10位的条形码

归还:如果丢失,收取电影日租金的5倍金额

收银员标记电影丢失,减少库存(重点在库存中的电影数量、收取顾客多少费用)

其他电影收费:天数*每日租金

不定期发优惠券,顾客归还电影时可以带一张优惠券

顾客可能分次归还所租电影

需要能追踪

-- 热门电影

-- 优质顾客

-- 每日/每月/每年收入

23、PROJECT(2):——CONCEPTUAL MODEL——项目二:概念模型

自己做的:

Mosh答案:

24、PROJECT(2):——LOGICAL MODEL——项目二:逻辑模型

现在需要考虑存储数据

①权限问题

收银员和店长无法拥有一致的权限集,每个用户的权限集不同,必须确保我们的用户拥有一致的权限

以上模型对应用来说要求了过高的细节度,更使用与需要完全控制到每个用户权限的应用程序

引入新实体——root

在下次注册新用户时,只需要把用户添加到特定组或身份里,用户就能自动获取身份的所有权限,用户就能够拥有一致的权限集

②管理权限

对电影的管理权限有点太细化,不需要那样的控制度,Permissions这个实体没有必要,只需要知道用户身份

在应用程序中写一个简单的IF语句,如果用户是店长,将开启所有功能;如果是收银员,或许需要隐藏或禁用某些功能

🔺例如在旅行,需要一个房间住一晚,预算100元,假设一个人来,只需要一间简单的房间,一张单人床

刚好现在就有一间房间,有大床、阳台、浴缸、wifi、游戏机,但一晚要500元

你不会为那些不需要的功能多花400元

🔺回到项目,所有未来可能会用上的附加功能,总有人要先为它买单——公司

不要过度设计,不要因为认为必要的功能浪费别人的钱,也是管理复杂性的问题

复杂的设计会一致贯穿于这个应用程序,每次需要修复一个bug或引入一个新功能时,都必须处理这个应用程序设计里不需要的复杂性

③实体关系

租赁&优惠券:一次租赁最多可以用一张优惠券,一张优惠券可以用于不同租赁(优惠券是可空类型)

租赁&电影:每次租赁只能租一部电影,一部电影可以被租很多次

租赁&顾客:同上

————TBC

相关文章:

MySQL数据分析进阶(十二)设计数据库——PART3

※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,笔记整理比较粗糙,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!) 【中字】SQL进阶教程 | 史上最易懂S…...

Kubernetes-1.22.0 可视化部署

目录 Kubeadm方式部署3master,2work集群(Kubernetes-1.22.0)-CSDN博客 1. 官方Dashboard 2. Kuboard 部署 3. Rainbond 部署 4. Kubesphere 部署 1. 官方Dashboard kubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/v2…...

在 vue3 中动态路由问题记录

第一种 如果这样子的话需要加上 /* vite-ignore / ,但是在这样用这行部署服务器上跳转会有问题 component: () > import(/ vite-ignore */ ../views/ e.component .vue) 第二种 // 解决跳转问题const modeules imporet.meta.glob(/views/**/**.vue)component: modules…...

进程编程及其函数的使用

1. 创建进程 创建进程的核心操作是使用 fork() 系统调用。 1.1 fork() 系统调用 fork() 创建一个新进程(子进程),新进程几乎是父进程的完整拷贝。fork() 返回两次: 在父进程中,返回子进程的 PID。在子进程中&#…...

为什么funnel图在邮件中不显示

在电子邮件中嵌入的Funnel图或其他图表可能不显示的原因有以下几种: 1. 邮件客户端对外部内容的限制 大多数邮件客户端为了安全,会阻止从外部服务器加载的内容,如图片、脚本或嵌入式图表。Funnel图通常是通过链接或外部脚本生成的&#xff…...

C语言 ——— 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串

目录 题目要求 代码思路 代码实现 题目要求 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串 例如 s1 "AABCD" ;s2 "BCDAA" ,返回1 s1 "AABcd" ;s2 "BCDAA" …...

白骑士的Matlab教学实战项目篇 4.4 机器学习与AI

系列目录 上一篇:白骑士的Matlab教学实战项目篇 4.3 控制系统设计 机器学习与人工智能(AI)是当前技术发展的前沿领域,通过数据驱动的模型和算法,可以解决许多复杂的问题。MATLAB 提供了丰富的工具和函数,支…...

事件监控模块——Channel模块

这个模块就是 记录文件描述符 和 想要监控的事件,实际就绪的事件,以及事件发生之后要怎么做,判断有没有监控这个事件,获取事件。 class Poller; class EventLoop; class Channel {private:int _fd;EventLoop *_loop;uint32_t _ev…...

OCR调研

OCR调研 一、介绍 OCR(Optical Character Recognition,光学字符识别)是一种将图像中的文字转换为计算机可处理格式的技术。OCR技术经历了从传统OCR到基于深度学习的OCR的转变。深度学习OCR技术通过模拟人脑神经元结构处理文本和图像数据&am…...

数据结构(学习版)

考纲 (一)数据结构部分; 线性表栈、队列、数组查找和内部排序树和图 (二)计算机算法设计部分: 递归与分省策路、回溯法贪心算法、分支限界法、动态规划算法设计中的数据结构运用 (三)程序设计基础(C或C)部分: 基本数据类型、各种运算符和表达式、基本控制结构。数组的定义…...

除了知云文献翻译外,这几款翻译工具值得推荐!

近年来,市面上涌现出众多优秀的文献翻译工具,其中知云文献翻译凭借其强大的功能受到了广泛好评。然而,除了知云文献翻译外,还有几款翻译工具同样值得推荐。今天,就让我们一起来了解一下! Foxit在线翻译 链…...

Element UI动态实现面包屑导航~

思路:监听路由变化,在路由规则中添加meta然后在组件中渲染。 import Vue from "vue" import VueRouter from "vue-router" Vue.use(VueRouter) // 解决ElementUI导航栏中的vue-router在3.0版本以上重复点菜单报错问题 const origin…...

安科瑞Acrel-2000ES储能能量管理系统在新型电力系统下分布式储能的研究

摘要:传统电力系统的结构和运行模式在以新能源为主体的新型电力系统中发生了巨大的变化,分布式储能作为电力系统中重要的能量调节器,也迎来了新的发展机遇。立足于储能技术发展现状,分析了分布式储能技术特点及在清洁可再生能源方…...

Git 逆转时光:版本回退操作详解

git 版本回退操作详解 一、Git的工作流程二、git clean尚未 commit 的修改三、已经 commit 尚未 push 到 remote 仓库四、已经提交到 remote 仓库五、回退建议六、总结 一、Git的工作流程 在讲这个版本回退之前,我们要温习一下Git的原理。下面这张图就是 Git 的整个…...

8.6.数据库基础技术-数据库的控制

并非控制 事务:由一系列DML操作组成,这些操作,要么全做,要么全不做,它从第一个DML操作开始,rollback、commit或者DDL结束,拥有以下四种特性,详解如下: (操作)…...

php语言基础入门

文章目录 php语言基础入门一、简介二、基础语法1、变量2、常量3、注释4、基础数据类型4.1、整形数据类型4.2、布尔数据类型4.3、字符串数据类型4.4、浮点型数据类型4.5、PHP数据类型之查看和判断数据类型 5、流程控制5.1、if-elseif-else语句使用5.2、switch语句使用5.3、while…...

告别杂音,从 AI 音频降噪开始

生活中,音频无处不在。无论是聆听动人的音乐,还是参与重要的电话会议,又或是沉浸于精彩的网课学习,清晰、纯净的音频质量都至关重要。然而,音频中的噪声却像不速之客,扰乱着这份美好。 音频中的噪声形式多样…...

Postman中params传参与Body传参区别以及Body中不同类型的区别

Postman中params传参与Body传参区别 在HTTP请求中,参数可以通过不同的方式传递给服务器,其中最常见的两种方式是使用params(查询参数)和body(请求体)。以下是它们的主要区别: 1. 位置&#xf…...

数据结构入门——05队列

1.队列 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先 进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头 队列也可以数…...

使用python MySQL 实现一个 key-value(string:json) 读写库

在Python中,我们可以使用`pymysql`库(如果MySQL服务器版本较高,也推荐使用`mysql-connector-python`)来建立一个简单的key-value存储库,其中键是字符串,值是JSON格式的数据。这里我们创建一个基本的类来完成读写操作: import pymysql.cursors import jsonclass JsonKVS…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

网络编程(UDP编程)

思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...