跳转到内容

应用编程/数据库

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

数据库

[编辑 | 编辑源代码]

什么是数据库?

[编辑 | 编辑源代码]

数据库是一种数据结构,用于存储组织信息。大多数数据库包含多个表,每个表可能包含多个不同的字段。例如,公司数据库可能包含用于产品、员工和财务记录的表。这些表中的每一个都将具有与存储在该表中的信息相关的不同字段。[1]

数据库存储为一个文件或一组文件。这些文件中的信息可以分解成记录,每个记录包含一个或多个字段。字段是数据存储的基本单位,每个字段通常包含与数据库所描述的实体的某个方面或属性相关的信息。记录也被组织成表,其中包含有关其各个字段之间关系的信息。虽然“数据库”一词被宽泛地应用于计算机文件中的任何信息集合,但严格意义上的数据库提供了交叉引用功能。使用关键字和各种排序命令,用户可以快速搜索、重新排列、分组和选择许多记录中的字段,以检索或创建有关特定数据聚合的报告。[2]

我们为什么要使用它们?[3]

[编辑 | 编辑源代码]

数据库相对于其他更简单的存储系统(如文本文件和电子表格)的三大主要优势是访问完整性安全

访问是指使数据对用户可用。

数据库支持良好的数据访问,因为

  • 大量数据可以存储在一个地方
  • 多个用户可以同时读取和修改数据
  • 数据库是可搜索和可排序的,因此可以快速轻松地找到您需要的数据
  • 数据结构是可扩展的,并且可以根据需求进行修改

完整性

[编辑 | 编辑源代码]

数据库可以确保其包含的数据是正确的,或者具有完整性

为了确保数据库的完整性,每个更改或事务都必须符合一组称为ACID的规则

  • 原子性:在更改数据库中的数据时,如果更改的任何部分失败,则整个更改都将失败,并且数据将保留在更改之前的状态;这可以防止创建部分记录
  • 一致性:在可以更改数据库中的数据之前,必须根据一组规则对其进行验证
  • 隔离性:数据库允许同时进行多个更改,但每个更改都与其他更改隔离
  • 持久性:一旦更改完成,数据就安全了,即使在系统故障的情况下也是如此

此外,数据库将具有备份、分发和冗余机制,以确保数据不会丢失。

虽然可以保护文本文件或电子表格的访问权限,但一旦有人获得对文件的访问权限,他们就可以访问该文件中的所有数据。数据库可以非常安全,包括能够对数据库的特定部分有访问权限,而其他部分没有。

数据库允许控制访问权限,允许用户具有不同的权限:例如,某些用户可能能够读取数据,但不能写入数据。

数据也可以进行分段,以便用户只能访问某些部分:例如,用户可能能够读取员工的姓名和地址,但不能读取他们的薪资信息。

您能想到数据库的其他用途吗?在评论中分享您的想法。

在下一步中,您将探索一个关系数据库示例,并查看其中包含的数据。

关系模型

[编辑 | 编辑源代码]

它是什么?

[编辑 | 编辑源代码]

[4]

关系模型是一个抽象模型,用于组织数据库中的数据。为了控制对数据库的访问、写入数据、运行查询或执行与数据库管理相关的任何其他任务,数据库管理系统必须具有一些底层模型来定义其包含的数据的组织方式。实现关系模型的数据库通常被称为关系数据库。关系模型长期以来一直是最复杂的数据组织模型,其广泛应用最近才受到非关系型——或 NoSQL——数据模型的兴起的影响。

关系模型中最基本的是关系,用户和现代 RDBMS 将其识别为表。关系是一组元组,即表中的行,每个元组共享一组属性,即列。列是关系数据库中最小的组织结构,表示定义表中记录的各个方面。因此,它们有更正式的名称,称为属性。将每个元组视为表中包含的任何类型的人员、对象、事件或关联的唯一实例可能会有所帮助。

[5]

域约束

如果属性值没有出现在相应的域中,或者其数据类型不正确,则可能会违反域约束。域约束指定在每个元组中,每个属性的值必须是唯一的。这被指定为数据类型,包括标准数据类型整数、实数、字符、布尔值、可变长度字符串等。

键约束

可以唯一标识关系中元组的属性称为表的键。关系中不同元组的属性值必须是唯一的。

引用完整性约束

DBMS 中的引用完整性约束基于外键的概念。外键是关系的重要属性,应该在其他关系中引用。引用完整性约束表示关系引用不同关系或相同关系的键属性的情况。但是,该键元素必须存在于表中。

数据库示例

[编辑 | 编辑源代码]

[6]

一些 relvars(关系变量)及其属性的理想化、非常简单的示例描述

  • Customer (Customer ID, Tax ID, Name, Address, City, State, Zip, Phone, Email, Sex)
  • Order (Order No, Customer ID, Invoice No, Date Placed, Date Promised, Terms, Status)
  • Order Line (Order No, Order Line No, Product Code, Qty)
  • Invoice (Invoice No, Customer ID, Order No, Date, Status)
  • Invoice Line (Invoice No, Invoice Line No, Product Code, Qty Shipped)
  • Product (Product Code, Product Description)

在这个设计中,我们有六个 relvars:Customer、Order、Order Line、Invoice、Invoice Line 和 Product。粗体下划线属性是候选键。非粗体下划线属性是外键。

通常,会选择一个候选键作为主键,并优先使用它,而其他候选键被称为备用键。

候选键是用于唯一标识的标识符,它强制确保没有元组会被复制;否则,通过违反集合的基本定义,会将关系变成其他东西,即一个包。 外键和超键(包括候选键)都可以是复合的,也就是说可以由多个属性组成。下面是用表格形式描述了我们的示例 Customer 关系变量的关系;关系可以被认为是关系变量的一个值。

关键术语

[编辑 | 编辑源代码]

属性 - 描述和表征记录的特定特征。

提交 - 结束关系数据库管理系统 (RDBMS) 中的事务,并将所有更改对其他用户可见。[7]

连接 - 只读属性提供游标对象使用的 SQLite 数据库连接。通过调用 con.cursor() 创建的游标对象将具有一个连接属性,该属性引用con

游标 - 数据库游标是一个对象,它能够遍历结果集中的行。它允许你处理查询返回的单个行。

数据库 - 有组织的数据集合。[7]

数据库管理系统 - 有多种类型的 DBMS(关系型、面向对象型等),但每个变体都允许读取、插入、更新、删除数据库,以及一般的管理/安全工具。[7]

删除 - 从表中删除一个或多个记录。[7]

标题 - 一组属性。[7]

插入 - 将一个或多个记录添加到单个表中。[7]

主键 - 一个或多个列(属性)的特定选择,其数据唯一地标识表(关系)中的每一行(元组)。[7]

查询 - 根据特定条件检索/创建数据。查询必须遵循 SQL 规则和语法。[7]

检索 - 以可以直接使用或供其他应用程序进一步处理的形式提供信息。[7]

记录 - 数据库表中实体的一个实例。[7]

模式 - 一组完整性约束,它结构化并建立数据库中数据的规则。[7]

选择 - 一个常用的 DQL 命令,用于从一个或多个表中返回记录的结果集。[7]

SQL - 结构化查询语言,用于从关系数据库中查询数据的编程标准。[7]

SQLite - 嵌入到程序中的关系数据库管理系统 (简称 RDBMS)。[7]

更新 - 更改表中一个或多个记录的指定数据。[7]

视图 - 数据库中的一组行,存储在数据上的查询,数据库用户可以像查询持久数据库集合对象一样查询它。[7]


参考文献

[编辑 | 编辑源代码]
华夏公益教科书