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

news2024/11/23 15:41:06

※食用指南:文章内容为‘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——项目一航班订票系统

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

在附件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

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

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

相关文章

c++ - c++11(1)

文章目录 前言一、统一的列表初始化1、使用{ }初始化2、 std::initializer_list 二、声明1、auto2、decltype3、nullptr 三、范围for循环四、右值引用1、左值引用和右值引用2、左值引用和右值引用的比较3、左值引用的使用场景4、右值引用的使用场景5、完美转发 前言 一、统一的…

在百度飞浆中搭建pytorch环境

文章目录 1 先检查创建的环境2 创建虚拟环境3 最终结果 1 先检查创建的环境 选择GPU版本 检查python版本 2 创建虚拟环境 虚拟环境的创建 python3 -m venv env_name # (python3 -m 路径 环境名)激活虚拟环境 source env_name/bin/activate这里注意,同名文件…

MySQL的InnoDB的页里面存了些什么

文章目录 创建新表页的信息新增一条数据根据页号找数据信息脚本代码py_innodb_page_info根据地址计算页号根据页号计算起始地址 主要介绍数据页里面有哪些内容,一行数据在文件里面是怎么组织的 创建新表页的信息 CREATE TABLE test8 (id bigint(20) NOT NULL AUTO…

Android开发-使用FFmpeg-Android进行音视频处理

使用 FFmpeg-Android 进行音视频处理 1. 前言2. FFmpeg-Android 简介3. 功能介绍及实现3.1. 视频字幕添加Kotlin 代码示例:3.2. 尺寸剪切Kotlin 代码示例:3.3. 添加或去除水印Kotlin 代码示例:3.4. 时长截取Kotlin 代码示例:3.5. …

【十万个为什么】强磁场环境用什么编码器好?磁编为什么不怕强磁场?磁编与光编哪一个抗干扰强?

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、案例场景1:场景2: 二、为什么磁编可以在磁场中工作三、磁编为什么不怕强磁场&#xf…

LVS实战项目

LVS简介 LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基于LVSkeepalived实现。 LVS集群的类型 lvs-nat : 修改请求报文的目标IP, 多目标 IP 的 DNAT lvs-dr &#xff…

vpp编译安装(Ubuntu 16.04)

1、编译 git clone -b stable/1801 https://github.com/FDio/vpp.git cd vpp ./extras/vagrant/build.sh && make 报错 解决: 操作系统是Ubuntu 18.04.5 换成ubuntu 16即可

step11:打包qml程序

文章目录 0.文章介绍1.增加环境变量2.复制RDU.exe3.找到Qt安装路径4.操作qt 6.4.3(minGW)命令框 0.文章介绍 1.增加环境变量 电脑里安装了两个版本的QT,最好把现在打包的QT版本环境变量移到最前面 添加完成环境变量之后,再在wi…

力扣高频SQL 50题(基础版)第四十一题之1517.查找拥有有效邮箱的用户

文章目录 力扣高频SQL 50题(基础版)第四十一题1517.查找拥有有效邮箱的用户题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题(基础版)第四十一题 1517.查找拥有有效邮箱的用户 题目说明 表: Users -----------…

c++语言学习,isalnum()函数分析

1:isalnum() 函数说明: 检查参数c,是否为英文字母或阿拉伯数字 2:函数原型: int isalnum(int c) 3:函数参数: 参数c,为检测字符 4:返回值: 若参数c为字母或数字&#…

全网最详细教你学习LVS(Linux virual server)

LVS 官网 : http://www.linuxvirtualserver.org/ //(可参考) 一、LVS定义: 是一个基于 Linux 操作系统的开源软件负载均衡项目。 LVS 主要用于实现服务器的负载均衡和高可用性。它工作在网络的第四层,可以对…

ERP帮助中心的卓越实践:以用友ERP为例的成功之路

引言 在数字化转型的浪潮中,企业资源规划(ERP)系统作为企业管理的核心工具,其有效应用直接关系到企业的运营效率与竞争力。然而,ERP系统的复杂性和多功能性往往让用户在初识阶段感到困惑。因此,构建一个高…

Boost搜索引擎:网络模块的构建

网页展示界面 每个网页界面都有他相应的代码构成 按F12键 就会出现.html文件代码 上图是csdn当前网页文件代码,所以说要想,设计好看的网页文件需要去学对应的只是,我没有怎么接触过,所以网页代码就不能为大家讲解了。 网页展示的…

软件设计之JavaScript(2)

软件设计之JavaScript(2) 【狂神说Java】JavaScript最新教程通俗易懂 学习内容: 软件开发技能点参照:软件开发,小白变大佬,这套学习路线让你少走弯路是认真的,欢迎讨论 软件开发技能点顺序参照:Java学习…

【鸿蒙开发基础学习】组件导航 (Navigation)

组件导航 (Navigation) Navigation 是路由容器组件,一般作为首页的根容器,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。Navigation 组件适用于模块内和跨模块的路由切换,一次开发,多端部署场景。通过组件级路由能力…

视频剪辑SDK,人脸美化与滤镜特效,焕发直播新活力

在数字化浪潮席卷全球的今天,直播已成为连接品牌与消费者、创作者与观众的重要桥梁。为了在激烈的直播竞争中脱颖而出,提供高质量、富有创意的直播内容成为关键。美摄科技,作为视频处理技术的先行者,携手其强大的视频剪辑SDK解决方…

Python:构建一个算法预测类型

准确工作:需要下载music.csv 已上传 构建模型内容: import pandas as pd music_data pd.read_csv(music.csv) # music_data Xmusic_data.drop(columns[genre]) # 删除的那一列的名字为genre Ymusic_data[genre] # 访问指定的列 Y 预测用的是决策树&…

leetcode日记(65)组合

一眼递归&#xff0c;第一版写出的代码写成了排列组合&#xff0c;然后修改后&#xff1a; class Solution { public:vector<vector<int>> combine(int n, int k) {vector<int> vec;vector<vector<int>> result;for(int i1;i<n;i){vec.push_…

[MAE] Masked Autoencoders Are Scalable Vision Learners

1、目的 NLP领域的自监督预训练非常成功&#xff0c;CV领域可以参考其masked autoencoding方法。主要挑战有&#xff1a; 1&#xff09;CNN不会直接用mask tokens或者positional embeddings&#xff0c;而是在规则网格上运算 -> Vision Transformers (ViT) 2&#xff09;Lan…

SQL注入sqli-labs-master关卡四

第四关如下&#xff1a; 查看其php代码&#xff1a;发现其与前三关的区别就在于id这里。即使用")进行逃离。 则步骤与前三关一致&#xff0c;细节上改变即可。 输入?id1判断是字符型还是数字型注入 输入?id-1") union select 1,2,3--只显示2&#xff0c;3列。 输入…