跳转到内容

关系型数据库设计/基本概念

来自维基教科书,开放书籍,构建开放世界

集合论

[编辑 | 编辑源代码]

关系型数据库理论建立在集合的数学理论之上。在数学中,集合是考虑多个对象的最普遍方式之一,并且已经建立了大量的理论来描述这一点。您不需要了解太多集合论就可以理解关系型数据库,但掌握基本概念会有所帮助。

集合仅仅是一个包含零个或多个对象的集合,所有这些对象都是不同的,没有任何其他结构。以下是集合:

注意,定义说零个或多个:一个包含零个成员的集合仍然是一个集合,即使它是空的。包含零个元素的集合用一对空括号表示,通常用符号表示。

如果两个集合包含完全相同的元素,那么它们就是相同的集合。除了它包含的元素之外,没有其他任何东西可以区分一个集合与其他集合。元素的顺序并不重要,因此无论我们选择以什么顺序写元素,集合都是相同的。

任何东西都可以放入集合中,而不仅仅是诸如数字之类的数学概念。您可以拥有所有美国总统的集合,并在集合论中与任何其他集合一样处理它。

甚至集合也可以是集合的成员。

集合可以是无限的,例如所有正整数的集合。

名称和对象

[编辑 | 编辑源代码]

数据库在告诉我们有关现实世界的信息时非常有用。但现实世界中的事物以一种模糊的方式被处理,这可能会在我们将其转换为数据库模型时让我们感到困惑。

名称就是一个很好的例子。当我们需要引用某件事时,我们会给它一个名字。人们往往不会想到这一点,但名称与对象不是一回事。“马克·吐温”是一个字符串,我们通常用它来指代作家马克·吐温,但这两者并不相同:“马克·吐温”包含十个字符,但不能说马克·吐温包含十个字符。

同一个对象也可能有多个名称。“马克·吐温”和“塞缪尔·克莱门斯”都是可以理解为指代《汤姆·索亚历险记》作者的字符串。

这很重要,因为您无法将现实世界中的对象放入数据库中,只能放入识别它们的少量信息。您希望选择对每个对象唯一的识别信息,并且不能混淆,但这往往比最初看起来更难。如果您的对象识别方法模糊,那么无论您的数据库多么严格,您得出的结论仍然会是模糊的。

实体和类

[编辑 | 编辑源代码]

数据库指的是现实世界中的对象,但并非总是以相同的方式。记录汽车经销店销售额的数据库可能会跟踪销售的个别汽车,以便我们确切地知道哪辆汽车卖给了哪个客户。另一方面,为制造商网站运行的数据库可能处理有关车型整体的信息,即有关这类汽车的整个的信息。

这一点很重要,因为语言并不总是能清楚地表达出来。“乔·史密斯昨天买了一辆福特蒙迪欧”使用的语言与“一辆福特蒙迪欧有四个轮子”相同,但前者指的是一辆具体的汽车,而后者是关于所有福特蒙迪欧的一般性陈述。即使不存在福特蒙迪欧(例如,在设计了该车型后,但在制造之前),后一种说法也可能是正确的。不要让语言迷惑你,从数据库设计的角度来看,它们是完全不同的。

目前使用两组关系型数据库术语。关系理论的最初开发者从理论的角度来解决这个问题,并使用来自集合论和形式逻辑的术语。这些术语从未在从业人员中流行起来,他们更喜欢使用更直观和更实用的术语,这些术语最终被纳入 SQL 标准。

关系型术语 SQL 等效项
关系,基关系变量
派生关系变量 视图,查询结果,结果集
元组
属性

大多数关于数据库的现代出版物使用下面描述的 SQL 术语,但您应该注意不同的术语。术语对并非完全同义词,因此一些关系理论作家(例如 Chris Date 和 Fabian Pascal)更喜欢使用严格的关系术语。

域是列允许的数据值集。例如,客户实体上的 FiveDigitZipCode 列可以位于整数域中。因此,数据库将不允许您将 123.45(浮点数)或 ABC(字符)等值放入该列。

一些作者在类型之间进行了区分,因为类型是构建到数据库管理系统 (DBMS) 中的基本概念(例如字符串、整数、浮点数),而域可以具有有关哪些值可接受的附加业务规则。例如,如果您有一个数据库存储十柱保龄球的分数,游戏的得分将是整数类型,但游戏的规则(不可能得分超过 300)意味着分数的域将是 0 到 300 之间的整数。域上的附加约束使得将错误数据插入数据库变得更加困难。

列是描述数据库模型中实体的属性。例如,客户实体可能具有 地址城市FiveDigitZipCode 等属性。

行是描述您要建模的实体的一组完整列。

表是行的集合,充当实体的逻辑分组。

数据库

[编辑 | 编辑源代码]

相关表的集合以及任何支持对象(例如存储过程)通常称为数据库(或模式)。多个数据库通常在逻辑上彼此分离。

术语“数据库”有时松散地用于指代管理数据库的软件。为了避免歧义,在更正式的上下文中,通常将软件称为数据库管理系统或 DBMS——或更具体地说是关系数据库管理系统或 RDBMS。

元数是指表中列的数量。如果表有五列(如上面的客户实体),我们说它的元数为 5。

基数是指集合中元素的数量。在关系数据库环境中,这通常意味着表中行的数量(因为表可以被视为一组行)。表的基数基于表中的行。例如,Employee 表可能每个员工只有一行,基数为 1。员工可能拥有 3 部手机,手机、工作和家庭。手机表对该员工的手机将具有 3 的基数。

华夏公益教科书