[Database 3] 关系型数据库基础

Table, Rows, and Columns

你可以认为一个关系型数据库是一系列由行(rows)和列(columns)组成的表(tables)的集合。
与普通的工作表格不同,数据库表的列包含相同类型的数据,具有数据验证的功能。一列所允许的取值集合称为列的域(domain)。
域和数据类型相似但不相同,一个列的数据类型(data type)是这个列可以持有的数据的种类。列可用的数据类型取决于适用的数据库,但是典型的数据类型包括:整数(integer),浮点数(floating point number),字符串(string)和日期(date)。
表行则存储了某一条数据的所有对应各列的值,可以将行看作一条记录(record),而某一行的某一列对应的数据库单元格的取值可以看作是该条记录的字段(field)值。

Relations, Attributes, and Tuples

因为行的值和一个具体的事物相关联(related),所以一张表的正式术语是关联(relation)。这和描述量表之间的关系可能存在混淆。
列的正式术语是一个属性(attribute)或数据元素(data element)。一张人物表有姓名一列,可以称作“每个人物关联具有姓名属性”。
行的正式术语是元组(tuple),你可以认为一个两属性关联持有二元组数据对,一个三属性关联持有三元组数据,一个五属性关联持有五元组数据,所以行被命名为元组。
理论上一个关联的属性和元组都是无序的,但是可以按序读取数据以便处理。

Keys

最简单的理解,一个键(key)是一个或多个列的组合,你可以用此快速地在表中查找到某一行的。
一个复合键(compound key or composite key)是包含多个列的键。
一个超键(super key)是表中的一个或多个列集合,保证没有两行会有相同的值。程序可以通过超键查询到任意特定的单条记录。
一个候选键(candidate key)是最小的超键,这意味着你移除超键中的任意列,它都不再是超键。
注意表中可能存在有多个超键和候选键。
一个唯一键(unique key)是一个超键,被用来唯一性地标识一个表的行。唯一键和候选键的区别是:候选键可以根据你的意愿被用来标识行,但是唯一键被用来限制数据不能是相同的,唯一键是应用层面的问题,而不像候选键是理论层面的概念。
一个主键(primary key)是一个主键,也是一个唯一键,被真正用来唯一性地标识或查找表中的某一行。一个表中只能有一个主键,主键也更多的是一个应用性问题,数据库产品会采用特殊的动作来保证主键查询比其他查询都快。
一些数据允许可选键字段没有值,但是主键的字段必须有值。比如使用 Name/Address/Event 作为唯一键,而将 Name/Event 作为主键,那么可以允许 Address 值为空。
一个替代键(alternate key)是一个不是主键的候选键。
一个辐键(secondary key)是用来查找记录但不保证唯一性。
最后一种是外键(foreign key),外键被用作一种约束而不是来查找表的,将在之后的 “Constraints” 部分介绍。

Indexes

索引是一种数据库结构,可以更快更容易地通过一个或多个字段的值来查找记录。索引和键不同,尽管非常相似,以至于很多人将它们混淆
比如你的顾客表的主键是顾客ID,但你有可能忘记该ID,而希望能够通过Name字段来作为不同的键。
构建和包含索引会花费数据库额外的时间,所以你不应该没有必要地使用索引。将索引放在你最可能查找的字段上。

Constraints

顾名思义,约束对表中的数据进行限制。

Basic Constraints

基本约束,关系型数据库使你能够对一个特定的字段进行基本约束。比如,决定字段是否必填,用 null 来代替空值,必填则不允许字段持有 null 值。
数据库也不允许字段持有不符合其数据类型的值。
这些约束限制你填入字段的值,帮助定义字段的域,所以也被成为域约束(domain restraints)。

Check Constraints

检查约束提供了更为复杂的限制,通过计算一个布尔表达式来看是否特定的数据被允许。
字段级别的检查约束验证单列,比如,可以对年龄字段设置 age>0 来限制年龄必须是正数。
表级别的检查约束可以检查多个记录的字段值来看数据是否有效,比如限制 (Salary > 0) OR (Commission > 0)

Primary Key Constraints

由定义,没有两条记录再主键字段上能够有相同的值,这是对数据的很大约束。
这种约束更为正式的术语是实体完整性(entity integrity),仅仅意味着没有两条记录是完全重复的(主键不重复),而且所有组成主键的字段都是非空的值。

Unique Constraints

一个唯一性约束组要一个或多个字段的值是唯一的。注意这只有在超键上设置这种约束才有意义,在值可重复的字段上设置这一约束是不对的。

Foreign Key Constraints

外键约束和前面的约束不同,外键并不是为了你通过外键所在字段来查找本条数据,一个外键引用另外一个表的键,数据库使用外键来定位另一个表中的记录。因为它定义了从一个表到另一个表的引用,这种约束也被成为参照完整性约束或引用完整性约束(referential integrity constraints)。
一个外键约束需要一张引用表的某条记录的一个或多个字段的值必须和另一个被引用表的对应值像匹配。被引用表的字段必须在候选键中,通常,它们是表的主键,很多数据库产品在你创建一个外键约束的时候默认使用外表的主键作为被引用项。
当你创建了两个表的外键关联时,数据库可以确保没有人能将引用值修改为不存在的被引用值。
同时,数据库也会在你删除被引用值所在记录而还存在对应的引用值记录时,采取特殊的操作,会根据数据库或你的设置,来拒绝你删除尚存在引用记录的被引用记录或者自动删除所有与之关联的引用记录。

Database Operations

最后介绍数据库操作,当代关系型数据库操作的核心时下列八种操作:

  • Selection:从表中选择一些或所有记录。
  • Projection:过滤表中的某些列或选择操作的某些列,让他们不在查询结果中显示。
  • Union:使用相似的列来组合表同时删除重复。
  • Intersection:将找出两张表的相同数据
  • Difference:这将找出在一张条中而不在另一张表的记录。
  • Cartesian Product:这将创建一张信标,包含第一张表每一条记录与第二张表每一条记录组合的结果。
  • Join:和笛卡尔成绩类似,但两张表的 数据的组合需要满足一定条件
  • Divide:与笛卡尔成绩相反,使用一张表来分割第二张表

上面的数据库操作我很多暂时没有理解,希望以后的学习能逐渐深入体会。

参考资料

[1] Stephens R. Beginning Database Design Solutions[M]. Wiley Publishing, 2008.

猜你喜欢

转载自blog.csdn.net/buildcourage/article/details/80578293