时间:2023-05-23 21:12:02 | 来源:网站运营
时间:2023-05-23 21:12:02 来源:网站运营
《PHP和MySQL Web 开发》第8章 设计Web数据库:当前使用关系数据库的时候,并不需要了解关系理论(这是一件好事),但还是需要理解一些关于数据库的基本概念。
books+---------------+-------------------+-------------------------------------+-------+| id | 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 |+---------------+-------------------+-------------------------------------+-------+
表名叫books,有id,author,title,price 四个数据列。每个列里对应的是相同的数据类型,每一行对应着是一条由id,author,title,price对应的值构成的数据。表中的每一列都有唯一的名称,包含不同的数据。此外每一列都有一个相关的数据类型。(注意:竖着的叫列,横着的叫行。)如上方表格所示,author 列的数据类型就是字符串类型。这个也很好理解吧?具体都有多少数据类型,在后面有介绍,别急,慢慢看。
有时候,列也叫做 域 或者 属性!为啥这是重点?
表中的每一行代表一个客户。每一行具有相同的格式,因而也具有相同的属性。行也称为记录。我上面的表格示例表示每一行代表一本书。
行也称为记录。为啥这是重点?道理刚才说过了。不说了。
每一行由对应于每一列的单个值组成,每个值必须与改了定义的数据类型相同。这个如果不理解的话,你私信我,我单独给你解释。
表中的标识列称为 键 或 主键。这是书中说的,书里说的对,标识列 称为 键 或 主键,和你说的有冲突啊?!
通常,数据库由多个表组成,可以使用键作为表格之间的引用。这个出现在别的表中的键,叫外键。
这种关系用关系数据库术语来描述的时候就是外键。
数据库整套表格的完整设计成为数据库的模式。以书中列子来说:Customers(CustomerID,Name,Address,City),这个就是文本格式表示,有的人会手画表示,怎么都可以,你整明白了就行。我就对这个文本格式的模式进行一下解释吧。
关系数据库中有3种基本的数据关系类型。根据关系双方所含对象的多少,可以将这些关系分为 一对一,一对多,多对多3种关系。定义下了,有三种关系。那么开始理解。
一对一关系表示关系双方只有一个对象相互对应。一对一是好理解的,定义都说了,你只能有一个对象,你对象也只能有一个男/女朋友,而这个男/女朋友得是你。
在一对多的关系中,一个表中的一行与另一个表中的多行具有相互关联的关系。这个叫一对多,但是这个不举男女恋爱的例子了,因为太扎心,咱讲父与子的关系。
在多对多的关系中,表中的多行与另一个表中的多行具有相互关联的关系。这个叫多对多,其实我一开始看的时候在想,什么情况下会出现多对多呢?
多对多,在数据库中也比较常见,可以理解为是一对多和多对一的组合。要实现多对多,一般都需要有一张中间表(也叫关联表),将两张表进行关联,形成多对多的形式。例如: 老师表、班级表、科目表,中间表为:课程表。例子很详细了,A老师教一二班语文,B老师教一二班数学。你思考一下,教师是个表,表里有AB两位老师,班级是个表,有一二两班。
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 |+---------------+-------------------+-------------------------------------+-------+
这是我写的测试数据,后续你写的时候也可以添加一些自己的数据,很有意思的。目前先看书就可以。当创建一个数据库时,我们经常为现实世界的实体和关系建立模型,并且储存这些实体对象与关系的信息。书中这句话就涵盖了标题的意思。
通常,数据库的设计不应该出现上述不规则中的任何一种。书里说的很含蓄,“通常”不这么干。我给你翻译翻译就是:除了DEMO 和入门学习!别鸡儿这么干!(你们技术老大,或者负责人让你这么干!你让他写下来签字!)
使用原子列值得意思是对每一行的每个属性只储存一个数据。你给我解释一下这句话,或者你脑子过一下,这句话什么意思。
所谓第一范式(1NF)是指在关系模型中,对列添加的一个规范要求,所有的列都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。这是其中第一范式的解释,其中说:原子性,即实体中的某个属性有多个值时,必须拆分为不同的属性。对“使用原子列值得意思是对每一行的每个属性只储存一个数据”。进行了解释。
即实体中的某个属性有多个值时,必须拆分为不同的属性。
在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。
简而言之,第一范式就是无重复的域。
一个典型的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引擎和数据库服务器都在同一台机器上运行。
但是,数据库服务器在另外一台机器上运行也是非常常见的。这样做是出于保密、提高性能以及负载平衡的原因而考虑的。从开发的角度来看,要做的事情基本上是一样的,但是它能够明显提高性能。
关键词:设计,数据