《数据库设计与开发》阅读笔记
$chp1 数据库在电子商务中的角色
本书的组织
第2章到第5章讨论数据库设计。
但是,在深入数据库设计之前,有必要了解数据库的开发环境和关系数据库设计的一些理论知识。
- 第2章介绍数据库环境,定义了一些重要的术语并概括论述了关系数据库理论。
我们可将数据库设计分为两大类,概念设计和逻辑设计。当进行概念设计时,您不必考虑前面提到的关系数据库的规则。
概念设计的实现是自由的,这意味着实现的精确意义是无关紧要的。
在概念设计期间您所要考虑的仅仅是数据库必须存储数据的实体,必须存储什么数据,以及实体之间是如何相互关联的。
-
第3章和第5章介绍的是概念设计。
-
第4章讨论的重要主题是规范化,它是用来确保数据库的设计符合关系规则。违背这些规则会导致数据的不一致。
介绍数据库实现和使用的章节是成对出现的,这是根据实现数据库设计所使用的数据库管理系统组织的。
- 第6章讨论如何用 Oracle创建数据库表。第6章还包括对 Oracle 表中数据的插入、删除和更新。
- 第7章描述如何用 Oracle版本的结构查询语言(structured querylanguage,SQL)从数据库中检索数据。
- 第8章和第9章的内容与此相似,但使用的是Microsoft Access作为数据库管理系统。
- 第10和第11章介绍的是使用 Microsoft SQL Server创建和使用数据库。您的老师可能仅要求其中的一对章节,但您自己也许愿意浏览介绍其他数据库管理系统的章节。
通过 Web前端(Webfront ends)对数据库的访问逐渐增多。换言之,更多的企业允许用户通过 Web 网页检索和操纵数据,而不是通过使用 SQL 直接与数据库管理系统进行交互。
- 第12章描述使用 Web 网页访问数据。
- 第13章讨论通过Web页面更新数据库中的数据。
基础术语和概念
企业系统的四个组成部分:网络、硬件、软件和内容。
Database system with multiple user views
$chp2 关系理论
- 描述关系模型。
- 识别实体关系图(ERD)中使用的符号。
- 定义和选择主键。
- 说明外键的职责。
- 识别和应用完整性规则。
- 说明关系数据库的优点。
2.2 关系模型
2.2.1 关系数据库管理系统(RDBMS)
2.2.2 数据库管理员(DBA)
2.3 实体关系图(ER图)
属性在每个表中被建模为字段,字段在表中列出。
一对多关系
多对多关系
2.3.1 主键
主键的特征:唯一的、最小的、非空、不可更新的
☆在主键的唯一性和最小化特性之间存在对立关系。在主键中包含越多的字段,唯一的机会就更大。
但是,最小化特性要求设计者找到最小的字段集合来形成一个唯一键。
我们更愿意使用由一个字段构成的主键,这是由于它的简单性。但是,有时需要超过一个字段构成主键。
现有字段 or 计算机生成:
2.3.2 外键
依赖表(dependent table,也被称为弱实体(weak entity) ),是需要用父表标识的子表。
依赖表常常将源于父表的外键作为主键的一部分合并进来。没有父表,依赖表在数据库中就不能存在。
关联表(associative table)是多对多关系中两个父表的子表。
2.3.3 数据完整性
由于关系模型依赖主键识别实体,依赖外键创建关系,必须保持键的完整性(有效性)。
确保键的完整性的规则有两条:
实体完整性:每个表必须有一个有效的主键。实体完整性要求设计者在创建表时指定主键。不巧的是,大多数数据库产品不能遵守实体完整性一一只能要求设计者不要忘记指定主键。
参照完整性:没有不相匹配的外键值。参照完整性要求外键值与它们参照的表中的已有主键值相匹配。
example:
Normalization的内容见chp4
2.4 数据库类型
- 层次的:IBM创造的信息管理系统(Information Management System,IMS)
- 网状的:IDMS
- 关系的:SQL
- 面向对象的:目前不主流
2.4.1 关系的优点
工业上采用关系数据库模型是由于它能相当有效地增强生产力。我们将依次检验关系模型的下列优点:
-
依赖于相关记录之间的逻辑链接而不是物理链接。
-
使用的是第四代语言。
-
允许高级别的数据独立性。
2.4.2 逻辑链接优于物理链接
只有关系模型才不依赖物理指针来链接数据项。
指针链接相关的记录,例如,一个演员和一个演出队。
在基于物理指针的系统中,程序员必须编写过程来跟踪链接以检索信息。
相反,关系模型使用的是逻辑指针。
在关系系统中要将一个演员与一个演出队链接起来,只需简单地将外键记录与相对应的主键进行匹配就可以了。
2.4.3 第四代编程语言(4GL)
结构化查询语言(SQL)是关系数据库管理系统用于操纵数据的语言。
结构化查询语言是第四代语言。
第一代计算机语言是二进制代码。
在第二代语言中通过汇编语言可得到二进制代码,汇编语言是二进制代码的文本缩写。
第三代语言包括编程语言,例如COBOL、C、Fortran、Pascal、Java、JavaScript 和VBScript。
结构化查询语言克服了3GL的两个约束。它是非过程性的(nonprocedural)和 面向表的(table oriented)。
“非过程性的” 是指编程人员只需指定期望的结果,而不需指定程序执行的每个步骤。此方法可得到非常简洁的程序。
“面向表的” 是指允许SQL每次在一个完整的表上进行操作。SQL程序的输入是一个表或多个表,输出是一个表。因此,SQL不需要任何循环。相反,在3GL中,一个操作通常仅影响一个记录中的一个字段。遍历剩余的字段和记录需要使用循环。相比较而言,循环会增加很多行的代码从而使得3GL相当冗长。
2.2.4 数据独立性
关系系统希望能有高级别的数据独立性。数据独立性使得 DBA可以重新组织数据的底层结构而不会引起应用服务器上的程序崩溃。DBA应该能够改变列名,并在表中移动列而不会影响应用。若这些改变是可能的,它们对于应用是透明的。数据独立性可使用视图获得。
开发者在数据库中创建的表被称为基础表(base tables)。这些表是我们自始至终都要使用的表。
相反,一个视图(view)是从这些表中导出的一个子集。
视图使得DBA可以限制每个用户可看到的数据库的区域。
下图显示了同一个基础表MEMBER 上的两个不同视图。Member_email_view 仅包含address、first_name和last_name字段,而 member_phone_view仅包含first_name、last_name 和 telephone字段。注意在创建视图时对字段进行了重命名。Email被重命名为address,fname 被重命名为first_name,Iname 被重命名为last_name,phone被重命名为telephone。
$chp3 概念设计
- 以系统的方法设计一个ERD。
- 确定表之间的基数。
- 正确地选择表的主键。
- 识别子表的外键。
- 正确地为属性确定数据类型。
3.1 构建ERD的五个步骤
-
- Step1:将实体表示为表
- 有不止一个吗?您能设想该实体的多个实例吗?
- 随着时间的推移有变化吗?实例数量随时间变化吗?
-
- Step2:确定关系
- 大多数情况下,一个表中的一条记录将对应于另一表中的多条记录。
- 对于多对多关系,必须在两个表之间创建一个新的关联表。
-
- Step3:列出字段
- 如果步骤 1 中的表只有一个字段,那么它可能只是另一个表的字段。
-
- Step4:识别键
- 所有表都必须有一个主键(唯一、最小、非空和不可更新)来唯一标识每条记录。
-
- Step5:确定数据类型
- 字段的数据类型和大小必须匹配。
本章内容主要介绍数据库的实例,暂时略过
$chp4 规范化
objective:
- 解释主键的正确功能。
- 解释主键和规范化之间的关系。
- 检测一个非规范化的设计。
- 使用分步骤过程通过第四范式(4NF)对设计规范化。
4.2 规范化设计
只有当每个字段只有一个值且每个表有正确的字段集,这个数据库才是规范的。
BCNF是在开发4NF之后发现的。BCNF是对3NF的改进,可以处理不适用于 3NF的特殊情况。
4.2.1 非规范化设计
-
规范化的设计将实体放在分离的表中。对于这一点,我们的设计都是规范的。规范化设计避免了重复数据,或将相同信息存储多次。
-
相反,非规范化设计却保留了重复数据,有些时候可以提高查询效率。
4.3 Arcade数据库的规范化
4.3.1 更新问题
4.3.2 插入问题
4.4 范式
4.4.1 第一范式(1FN)
-
定义:表中所有字段仅包含单值。
-
诊断出1NF违例的简单方法是找出包含超过一个单值的字段。
换句话说,第一范式就是要求数据库中的表都是二维表。
4.4.2 确定因子
4.4.2 第二范式(2FN)
- 定义:表中的每个非键字段由整个主键确定,且不能由主键自身的一部分确定。