跳转到内容

关系型数据库设计/简介

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

什么是数据库?

[编辑 | 编辑源代码]

计算机程序对数据进行操作以产生结果。程序可以在运行时将这些数据存储在内存中,但通常我们需要数据在程序的生命周期结束后继续存在,或者在程序运行的多个实例之间共享数据。程序员可以为每个新程序编写新的数据存储代码,但这会导致重复工作,因为每次的代码都非常相似。从最广泛的角度来看,数据库技术关注的是解决存储、管理和检索数据的通用解决方案。

从计算机科学的角度来看,我们可以简单地说 数据库是一组连贯的信息。而信息则是数据的加工形式。数据库主要关注的是结构化数据:按照某种规律模式存储的数据,使计算机能够过滤和处理数据,并推断出在最初输入数据中没有明确规定的问题的答案。一个能够存储信息并以未修改的形式返回信息的程序(例如文件系统)通常不会被视为数据库。

关于数据库最普遍的理解是,它是一组关于世界的真相。您想知道某个事实是否为真(例如“Jim 是 MultiWidget Corp 的客户经理吗?”)或在某个事实中缺少的是什么(例如“乌干达的首都是哪里?”)。您可以将您的问题转换成适合您的数据库的形式,然后数据库可以给出答案。数据库在您提出问题的方式以及哪些问题可以有效地得到回答方面有很大的差异,但在某种抽象的层面上,它始终遵循这种模式。

什么是数据模型?

[编辑 | 编辑源代码]

数据库的目标是提供通用的数据管理解决方案,因此作为数据库软件的设计者,您希望系统能够在尽可能多的情况下使用,而无需针对客户的应用程序进行定制。然而,关于世界的一般性事实以各种不同的形式出现。同一款软件如何能够处理从人际关系到工业过程的方方面面,而不会变得极其复杂?

解决方案在于数据模型:一组规则、假设和约定,帮助将现实世界中的松散概念通过有限数量的可重用概念转换为计算机中有限且客观的模型。关系模型是最广为人知和商业上最成功的几种数据模型之一,但它并非唯一的数据模型。

什么是关系型数据库?

[编辑 | 编辑源代码]

关系型数据库是一种将数据组织成表、行、属性和域的集合的数据库。谓词逻辑用于描述数据库中包含的信息,并用于从数据库中查询信息。(参见维基百科:关系模型

关于形式化的一句话

[编辑 | 编辑源代码]

我们可以从非常直观的描述到精确的数学形式化,在几个不同的层面上讨论数据库。在讨论数据库时,通常存在一种在可理解的写作方式和形式上正确的写作方式之间的矛盾。在这本书中,我们将尽力保持对理论的忠实,但不会以牺牲理解力为代价。必要时,这将涉及对某个主题进行更松散的直观讨论(这可能包含一些技术上不正确的内容),以在更正式地处理该主题之前建立一个理解水平。

在选择示例来说明特定要点时,也存在类似的矛盾。关于构成良好数据库设计的规则有很多,但通常遵循这些规则会导致示例变得复杂,从而更难理解。在这本书中,我们将重点关注能够很好地说明所讨论点的示例,并相信读者能够理解与讨论主题无关的示例中的设计选择不一定需要遵循。

关系模型和 SQL 实现

[编辑 | 编辑源代码]

关系模型是迄今为止最广泛实现的数据模型,但绝大多数实现都是基于结构化查询语言 (SQL)。SQL 标准在几个重要方面未能完全遵循关系数据模型,例如允许表中出现重复行。由于没有任何商业级数据库工具使用关系模型的纯净形式而不使用 SQL,因此许多书籍将关系模型和 SQL 视为不可分割的,并淡化了它们之间的矛盾。

本书将用 SQL 术语讨论关系设计,但也将指出关系模型应该以不同的方式运作的地方。

华夏公益教科书