您的位置:首页 > 编程语言 > PHP开发

《PHP和MySQL Web 开发》 第8章 设计Web数据库 (8.2)

2018-07-20 17:23 239 查看
LCL WARNING

这是我学习《PHP和MySQL Web 开发》的读书笔记,一些重要的知识点我会记录下来,当然只会写我觉得重要的。

如果有幸有人看到这个学习笔记了,你要结合着书看,不要光看这个笔记。

在笔记里我会记录一些我学习中遇到的问题和解决办法与注意事项。

为了方便管理和查找,文章或者说笔记的目录我就按照书里的排了,方便对比着看。

不是教学!重要的是说一遍!我是PHP和MySQL 的初学者,我本身是个前端,为了面向工资编程,拓宽知识面才学的。

其实还是有一些私心得,因为都说教学相长 和 小黄鸭调试法,我这个是小老虎学习法,对着小老虎讲知识点,保证自己学的扎实,能挣钱。

欢迎探讨和指教,须知一山更比一山高,但是拒绝杠精!

前情提要
《PHP和MySQL Web 开发》 第8章 设计Web数据库 (8.1)

内容太多了,不好编辑,我就没放在一起。前情提要见如上链接吧。

李重楼

本章主要是介绍了:

关系数据库的概念和术语

Web数据库的设计与架构

基础知识还是要有的,方便了解一些专有名词,包括数据库是干啥的,后端说的时候你听了至少不懵逼。开始吧!

8.2设计Web数据库

书中是以 Book-O-Rama(拉玛的书店?)的内容为例的,我也尽量吧。

customers
+------------+-----------------+--------------------+--------------------+
| customerid | name            | address            | city               |
+------------+-----------------+--------------------+--------------------+
|          1 | 刘能             | 牡丹江大街           | 牡丹江             |
|          2 | 李重楼           | 北京中弘像素         | 北京               |
|          3 | 谢广坤           | 保定市              | 保定               |
|          4 | Alan Wong       | 1/47 Haines Avenue | 保定               |
|          5 | Michelle Arthur | 357 North Road     | Yarraville         |
|          6 | Melissa Jones   | 红庄 c3-1          | Nar Nar Goon North |
+------------+-----------------+--------------------+--------------------+

order
+---------+------------+--------+------------+
| orderid | customerid | amount | date       |
+---------+------------+--------+------------+
|       1 |          3 |  69.98 | 2018-06-27 |
|       2 |          1 |  49.99 | 2018-06-26 |
|       3 |          2 |  74.98 | 2018-06-25 |
|       4 |          3 |  24.99 | 2018-06-24 |
+---------+------------+--------+------------+

books
+---------------+-------------------+-------------------------------------+-------+
| isbn          | author            | title                               | price |
+---------------+-------------------+-------------------------------------+-------+
| 0-672-31697-8 | Michael Morgan    | Java 开发                           | 38.49 |
| 0-672-31745-1 | Thomas Down       | Linux 开发                          | 27.49 |
| 0-672-31509-2 | Pruitt,et al.     | 时间管理                            | 27.49 |
| 0-672-31769-9 | Thomas Schenk     | 开放系统管理                        | 54.99 |
| 0-672-31000-1 | 李重楼            | web开发笔记                         | 99.99 |
| 0-672-31000-4 |  Nicholas C.Zakas | JavaScript高级程序设计(第3版)       | 99.99 |
| 0-672-31000-5 | 李重楼            | web插入数据库                       | 53.20 |
| 0-672-31000-6 | 李重楼            | 网站建设与拆毁                      | 44.36 |
+---------------+-------------------+-------------------------------------+-------+

这是我写的测试数据,后续你写的时候也可以添加一些自己的数据,很有意思的。目前先看书就可以。

8.2.1考虑要建模的实际对象

当创建一个数据库时,我们经常为现实世界的实体和关系建立模型,并且储存这些实体对象与关系的信息。

书中这句话就涵盖了标题的意思。

这一节也没啥好说的,你保证能理解数据库表,列,行,字段,值,这些概念,看的懂书中给出图例的键,外键就可以。

也别着急实际操作,切勿操之过急。毕竟古人云:捷克,斯洛伐克 嘛。

8.2.2避免保存冗余数据

来,跟我读:避免保存冗(rǒng )余数据。(多余的重复或啰嗦内容(包括信息、语言、代码、结构、服务、软件、硬件等等)均称为冗余)

别笑,我之前默念了好几年的“沉余”,不会,读错不丢人,丢人的是 不会,还不学。再读一遍“ 冗(rǒng )余”。

这一节开篇没啥说的做了一下自问自答,你先看吧。

看完咱们来画重点。

重点来了!!!

三个"不规则"

1.修改不规则

书中举了Juile在下了订单后搬家了,需要在三个地方更新她的地址,进行三次同样的操作。

这很容易使我们在一个地方修改数据,从而导致数据库中的数据不一致,因为问题发生在修改数据库的时候所以称为“修改不规则”。

2.插入不规则

每次必须检查Juile的数据(地址)是否与表中当前行一致,如果不检查,可能会有两行关于Juile相互冲突的数据,比如一条数据告诉我们Juile住二环,另一条则可能表命明她住南四环。

因为出现在插入数据的时候,所以称之为“插入不规则”。

3.删除不规则

如果订单交货,需要将Juile的订单信息从数据库删除,也意味着她的地址没有了。她下次再订货,还要单独的提交一遍地址。

因为从数据库中删除一行的时候发生的,所以称之为“删除不规则”。(这点尤为重要,在电商公司拼命的获取用户隐私,地址这么重要的数据,你在用户收到快递就给删了?!这么设计表你能被老大打死!)

通常,数据库的设计不应该出现上述不规则中的任何一种。

书里说的很含蓄,“通常”不这么干。我给你翻译翻译就是:除了DEMO 和入门学习!别鸡儿这么干!(你们技术老大,或者负责人让你这么干!你让他写下来签字!)

这里主要是介绍一些数据库设计的基本原则,业界通用的,所以别烦躁,好好看,万丈高楼平地起,辉煌还得靠自己!

8.2.3使用原子列值

你看到这的时候,我默认你是看完8.2.3这一节了。

有哪不懂的吗?

没有?

太好了!

我有!

使用原子列值得意思是对每一行的每个属性只储存一个数据。

你给我解释一下这句话,或者你脑子过一下,这句话什么意思。

如果你能毫不费劲的答出这句话什么意思,我觉得你不应该看我的笔记,因为我觉得没必要。

如果你一带而过,没有深入思考过这句话,或者我问了你,你解释不上来,那么,不要难过,为啥呃?

因为我第一遍,还没写笔记看的时候,也是一带而过,因为我觉得木有用,不用深入看,不影响我搞后面的内容。

但是!

是谁说的来着?但是之前的话毫无意义!

我要写笔记给你看的时候,我被这句卡住了!我解释不上来!

我百度,我谷歌这句话,基本上全是照着书抄!根本没解释这句话!

经过我不懈的翻书以及修改关键词,我搜到了!

原文章见此处:一个小时学会MySQL数据库 ,我截取文章见此处:数据库规范化

原文中对MySQL数据库有概要介绍,包括数据库的历史。大致阅读时间半个小时。

而我呢,截取其中 1.4 部分,用来解释上面那句话!

所谓第一范式(1NF)是指在关系模型中,对列添加的一个规范要求,所有的列都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。

即实体中的某个属性有多个值时,必须拆分为不同的属性。

在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。

简而言之,第一范式就是无重复的域。

这是其中第一范式的解释,其中说:原子性,即实体中的某个属性有多个值时,必须拆分为不同的属性。对“使用原子列值得意思是对每一行的每个属性只储存一个数据”。进行了解释。

如果不懂去看原文,我都能看懂,你应该也行。还是不懂,私信我。咱俩一起学习!

补充一下:推荐看原文,别嫌弃麻烦!至少我截取的部分 数据库规范化 要看,多看几遍,不累的。

所以说,写阅读笔记出来,对自己也是一种提高,逼着自己仔细看书,学的扎实~

8.2.4 选择有意义的键

答案:略。

8.2.5考虑需要询问数据库的问题

答案:略。

8.2.6 避免多个空属性的设计

答案:略。

8.2.7避免多个空属性的设计

答案:略。

上面的 “答案:略” 是不是在初高中参考书里经常见啊?

我是经常见,很烦人,但是那两节我真的没有要记得,所以略就略吧。

这三节主要是联系上下文,传达基础理论知识的。多看几遍没坏处,我觉得没必要是因为我记脑子里了~啦啦啦啦

8.3 Web数据库架构



书里的图8-9

一个典型的Web数据库事务包含下列步骤,这些步骤在图8-9已经标出。以Book-O-Rama书店为例,我们逐个解释这些步骤。

1)用户的Web浏览器发出HTTP请求,请求特定Web页面。例如,该用户可能以HTML表单的形式,要求搜索Book-O-Rama书店里所有由Laura Thomson编写的图书。搜索结果网页称为results.php。

2)Web服务器收到results.php的请求,获取该文件,并将它传到PHP引擎,要求它处理。

3)PHP引擎开始解析脚本。脚本中有一条连接数据库的命令,还有执行一个查询(执行搜索图书)的命令。PHP打开通向MySQL数据库的连接,发送适当的查询。

4)MySQL服务器接受数据库查询并处理。将结果(一个图书的列表)返回到PHP引擎。

5)PHP引擎完成脚本运行,通常,这包括将查询结果格式化成HTML格式。然后再将输出的HTML返到Web服务器。

6)Web服务器将HTML发送到浏览器。这样用户就可看到她所搜索的图书。

这个过程基本上与脚本引擎和数据库服务器无关。通常,Web服务器软件,PHP引擎和数据库服务器都在同一台机器上运行。

但是,数据库服务器在另外一台机器上运行也是非常常见的。这样做是出于保密、提高性能以及负载平衡的原因而考虑的。从开发的角度来看,要做的事情基本上是一样的,但是它能够明显提高性能。

这一节我是纯照书敲的,如过你搞过前端开发,应该一看就懂。

不懂就熟读三遍,学完了整本书你再回来看这段,你就会发现真的没有什么要说的,啦啦啦啦~

第8章的内容完毕了,其实你要是跟着我这笔记看,包括反复阅读加理解,时间往宽了说,一天!8个小时~绝对能整明白的,不要怕难~加油哦~看好你哦~

请看下集:

《PHP和MySQL Web 开发》 第9章 创建Web数据库

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP MySQL