MySQL数据分析进阶(十二)设计数据库——PART3
※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,笔记整理比较粗糙,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!)
【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!
https://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图通常是通过链接或外部脚本生成的ÿ…...
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. 位置…...
数据结构入门——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…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
