跳转到内容

单元 1.3.2 数据库

来自维基教科书,开放世界中的开放书籍


如今,几乎所有组织都在使用数据库。它们允许快速检索、更新和筛选数据。它们允许某些用户访问受限的数据(例如,用户只能看到他们被允许看到的内容),这对于安全性和专注于工作很有帮助。它们还降低了出现不一致或错误的可能性。

文件类型

[编辑 | 编辑源代码]

历史上,数据存储在单独的文件中。它们通常存储在串行或顺序文件中,因为数据存储在磁带上,磁带必须按顺序写入或读取。

串行文件

[编辑 | 编辑源代码]

串行文件中的记录一个接一个地存储。这是在磁带等细长介质上存储数据的唯一方式。文件可以包含必要数量的数据,但每个记录必须具有相同的结构。要定位记录,必须从头到尾搜索整个文件。对于大型文件,这可能是一个漫长的过程。

顺序文件

[编辑 | 编辑源代码]

顺序文件中的记录一个接一个地存储,但按特定顺序存储。这使得搜索特定记录变得容易得多。但是,它可能会造成问题,例如在每天的图书馆交易中。除了按时间顺序外,没有特定的顺序可遵循(如书号、借书人号或借书日期),这将无济于事。

这意味着必须定期对数据进行排序。这涉及将数据写入另一个文件,这只是一个部分解决方案。搜索文件仍然很耗时,并且必须在排序完成后才能进行。

索引通过生成一个单独的索引文件来允许更快地搜索顺序文件。数据被划分为类别,这些类别链接到文件中类别开始的位置。

即使使用所有这些技术,由于搜索和排序,仍然存在低效率。这些格式中的简单数据库是平面文件数据库。

固定和可变长度字段

[编辑 | 编辑源代码]

固定长度

[编辑 | 编辑源代码]

固定长度字段是指每个字段始终具有相同字节数的字段。这允许软件计算字节以计算字段。这是一种易于编程的方法,搜索速度快,易于计算计划数据库的文件大小,但由于并非所有值都会使用分配给该字段的空间,因此可能会浪费存储空间。

可变长度

[编辑 | 编辑源代码]

每个字段都由一个唯一的标识符分隔,例如逗号。这允许文件更小、更灵活。

可以对记录的关键字段进行转换,以创建磁盘地址。这允许设备直接转到磁盘的特定部分并从那里开始。这种方法非常适用于稀疏数据库。

平面文件数据库

[编辑 | 编辑源代码]
  • 快速且易于创建
  • 适用于少量数据
  • 非常适合单实体模型
  • 数据冗余 - 重复的数据存在
  • 数据不一致 - 重复的数据更容易出错
  • 数据完整性降低
  • 数据依赖 - 更改数据格式可能需要更改整个程序。
  • 在平面文件数据库中,查询和报告更具挑战性。

关系数据库

[编辑 | 编辑源代码]

在关系数据库中,数据存储在单独的表中。每个表存储有关特定实体的数据。关系数据库应该遵守某些规则

  • 每行必须以相同的方式构建,即每列只能包含一种数据类型。
  • 一列或多列的组合必须使每行唯一。这个唯一标识符称为主鍵,如果使用多列,则称为复合主鍵。
  • 关于行或列顺序没有特定规则。
  • 关系(表)中的两个元组(行)不能相同。

关系数据库中的表通过关系链接。记录之间的关系是通过将外键字段的值设置为另一个表中所需记录的主键来实现的。

次要键

[编辑 | 编辑源代码]

次要键允许快速搜索关系,通过将类似项与非唯一键链接。例如,邮政编码对单个房屋而言并不唯一,但它可以用于快速查找某个街区的房屋。

实体关系建模

[编辑 | 编辑源代码]

数据存储在单独的表中以避免数据冗余。但是,将实体分离到数据库中的方法并不总是显而易见的,因此使用了数据库规范化过程。

数据库规范化

[编辑 | 编辑源代码]

规范化是指设计关系数据库以使其最有效,从而提高其效率和实用性。它围绕着减少冗余数据和确保数据依赖关系。它是一系列逐步引导到范式化的步骤。

规范化的优势

  • 无数据冗余,因为数据存储在一个地方,节省了存储空间
  • 数据完整性得到维护,因为数据不会重复,所以不会变得不一致
  • 参照完整性强制执行,阻止相关记录成为孤儿(通过防止一对多关系中的一方被删除)
  • 搜索速度更快,因为表更小,字段更少
  • 可以执行更复杂的查询,因为数据可以在相关表之间链接

非规范化形式(UNF / ONF)

[编辑 | 编辑源代码]

存在数据冗余,并且可能在单个属性内具有复杂的数据结构。

第一范式(1NF)

[编辑 | 编辑源代码]

每个字段只包含该属性的一个数据。例如,学生表中的科目字段只包含一个科目。

从 UNF 转换为 1NF

  1. 消除同一表中的重复属性
  2. 消除单个属性中包含复杂数据结构的条目,使用多个条目
  3. 识别(a)唯一标识每个条目的列

第二范式(2NF)

[编辑 | 编辑源代码]

1NF 且没有部分依赖关系(没有属性依赖于复合主键的一部分)。

从 1NF 转换为 2NF

  1. 删除出现在多行中的任何数据集并将它们转移到新表
  2. 使用外键在这些新表和早期表之间创建关系

第三范式(3NF)

[编辑 | 编辑源代码]

2NF 且不包含非键依赖关系(属性依赖于不是键的另一个属性的值)。

所有属性都依赖于键,整个键,仅此而已。

从 2NF 转换为 3NF

  1. 删除任何不依赖于主键的列并将它们转移到新表

实体关系图

[编辑 | 编辑源代码]

这些图显示了实体之间的关系

不同类型的数据库关系示例。

数据库管理系统 (DBMS)

[编辑 | 编辑源代码]

DBMS 是一种用于创建和管理数据库的软件类型。它们为用户提供了系统化的方法来检索、排序、更新和管理数据。它充当访问数据库的应用程序和存储在数据库中的数据之间的中介。DBMS 处理

  • 数据库结构
  • 单个表
  • 查询
  • 接口
  • 视图
  • 输出

DBMS 还具有保护和维护作用,包括

  • 访问权限的设置和维护
  • 自动备份
  • 保持参照完整性[1]
  • 维护索引
  • 更新数据库

为了保持参照完整性,DBMS 确保外键与链接表中记录的主键相对应。可以通过阻止在其他表中被记录引用的记录被删除来强制执行,或者通过级联删除引用要删除的记录的记录。

数据库视图

[编辑 | 编辑源代码]

物理视图

[编辑 | 编辑源代码]

实际数据存储的视图。这只是 DBMS 系统工程师关注的问题,因为它显示了数据项如何在磁盘上存储。

逻辑视图

[编辑 | 编辑源代码]

这查看表的构造、查询、报表和软件,这些软件将为系统用户提供数据库的功能。

用户视图

[编辑 | 编辑源代码]

数据库的外观,以及最终用户的用户界面。

结构化查询语言 (SQL)

[编辑 | 编辑源代码]

这是一种旨在管理数据库中数据的语言。它可用于访问、插入和更改数据,并能够创建、修改和删除数据库中的表和关系。

基本语句

[编辑 | 编辑源代码]

从表中检索特定字段的值

SELECT name, city FROM customers;

返回customers表中每个记录的namecity列的值。

使用条件检索一组记录

SELECT * FROM customers WHERE country = "Mexico";

返回customers表中country字段为 Mexico 的所有记录的所有列。

使用多个条件检索一组记录

SELECT * FROM customers WHERE country = "Germany" and city = "Berlin";

返回customers表中country字段为 Germany 且city为 Berlin 的所有记录的所有列。

SELECT * FROM customers WHERE city = "Berlin" or city = "Munich";

返回customers表中city字段为 Berlin 或 Munich 的所有记录的所有列。

从表中删除记录

DELETE FROM customers WHERE name = "Jordan";

删除customers表中name字段为 Jordan 的所有记录。

向表中插入记录

INSERT INTO customers (name, country, city) VALUES ("Matt","England","London");

customers表中插入一条新记录,name为 Matt,country为 England,city为 London。

删除整个表

DROP TABLE customers;

删除customers表及其所有记录。

从多个表中检索链接的记录

SELECT name, cost FROM customers JOIN orders ON customers.id = order.customer_id;

返回orders表中所有记录的客户姓名和订单成本。

ACID 是一组保护数据库完整性的规则,它们描述了事务必须符合的属性。事务是对数据库执行的单个逻辑操作。

  • Atomicity - 事务必须全部执行或不执行,不能保存半完成的事务。如果事务失败,数据库不会改变。
  • Consistency - 任何事务都必须将数据库从一个有效状态带到另一个有效状态。例如,在账户之间转账时,转入一个账户的资金必须与从另一个账户中取出资金相平衡。
  • Isolation - 事务不能互相干扰。当记录被锁定时,事务可以排队(事务处理),以便事务按顺序执行。
  • Durability - 事务完成后,它将被永久存储。在系统故障的情况下,事务及其操作将保留。通常这涉及将数据库存储在某种非易失性存储器[2]中,例如 辅助存储器

这些是持久存储的四个基本功能。

  • Create - 可以创建新的实体并将其存储在表中。
  • Read - 可以检索和输出有关表中实体的信息。
  • Update - 可以修改有关实体的信息。
  • Delete - 可以从表中删除实体。

参考文献

[编辑 | 编辑源代码]
  1. 引用完整性:数据库处于一致状态
  2. 非易失性存储器 的内容在断电后会保留
华夏公益教科书