表、模式、列和键
了解数据库组件,例如数据库表、模式以及主键和外键。
数据库表
现在我们已经了解了数据库在现实世界中的应用以及掌握 SQL 知识的好处,接下来将深入探讨数据库的组成部分。
我们可以将数据库的各个组成部分称为对象。这些对象包括表、列、索引和触发器等。本质上,它们都是构成数据库数据拼图的重要部分。
在数据库中,表用于存储数据本身。一个表由列组成,这些列是表的标题,例如“FirstName”(名字)和“LastName”(姓氏)。
数据在单元格中显示,比如某人的实际名字和姓氏。某些单元格可能没有数据,这在数据库中被称为 NULL。这意味着该单元格中没有任何数据。
注意: 在 Microsoft SQL Server 中,一张表最多可以有 1,024 列,但行数没有限制。
模式
模式可被视为表的逻辑容器。它本质上是一种按数据类型对表进行分组的方式。对于使用数据库的终端用户(如运行报表的人)来说,模式的存在不会产生影响。然而,直接操作数据库的用户(如数据库管理员或开发人员)会看到可用的模式。
举个实际例子:假设有多个包含销售记录的表,例如“Sales Order”(销售订单)、“Sales History”(销售历史)或“Sales Customer”(销售客户)。我们可以将这些销售相关的表都放入一个名为“Sales”的模式中,以便在直接操作数据库时更清晰地识别它们。
列
如前所述,列是表中的一个标题,由数据类型定义。数据类型规定了该特定单元格中可以存储的数据类型,即行与列交汇处的数据。表格中被高亮的每一行代表一列。
表中的列
| BusinessEntityID | Title | FirstName | MiddleName | LastName | Suffix | |
|---|---|---|---|---|---|---|
| 1 | 1 | NULL | Dylan | A | Miller | NULL |
| 2 | 2 | NULL | Diane | L | Margheim | NULL |
| 3 | 3 | NULL | Gigi | N | Mathew | NULL |
| 4 | 4 | NULL | Michael | NULL | Raheem | NULL |
行与 NULL 值
行是表中的一条记录。一行通常横跨整个表,并在每个列中包含数据。有时,某个或多个单元格中可能包含“NULL”值。
回到我们的例子:大多数人有名字和姓氏,但并非所有人都有中间名。在这种情况下,某一行在名字和姓氏列中有值,但在中间名列中为 NULL,如下表所示:
单元格中的 NULL 值
| BusinessEntityID | Title | FirstName | MiddleName | LastName | Suffix | |
|---|---|---|---|---|---|---|
| 1 | 1 | NULL | Kenn | A | Sanchez | NULL |
| 2 | 2 | NULL | Terri | L | Duffy | NULL |
| 3 | 3 | NULL | Roberto | NULL | Tumburello | NULL |
| 4 | 4 | NULL | Rob | NULL | Walters | NULL |
| 5 | 5 | Ms. | Gail | A | Erickson | NULL |
主键
主键是应用于某一列的约束,强制该列的所有值必须唯一且非空。
对列中值的唯一性要求有助于维护数据完整性,防止未来出现数据问题。
一个真实的主键示例是员工编号或销售记录编号。我们不希望两个不同的人拥有相同的员工编号,也不希望不同的销售交易拥有相同的销售记录编号,否则在存储和检索数据时会造成困难。
从下面的例子可以看出,“BusinessEntityID”列中的每个值对每个人来说都是唯一的。
表中的主键
| BusinessEntityID | Title | FirstName | MiddleName | LastName | Suffix | |
|---|---|---|---|---|---|---|
| 1 | 1 | NULL | Carol | M | Philip | NULL |
| 2 | 2 | NULL | Merav | A | Netz | NULL |
| 3 | 3 | NULL | Reuban | H | D'sa | NULL |
| 4 | 4 | NULL | Eric | L | Brown | NULL |
| 5 | 5 | NULL | Sandeep | P | Kaliyath | NULL |
| 6 | 6 | NULL | Mihail | U | Frintu | NULL |
外键
外键是连接两个表的纽带。外键允许重复值和 NULL 值。在下面的第一个表 “Sales.SalesOrderDetail” 中,“ProductID” 就是外键。
“SalesOrderDetail” 表中的 “ProductID” 与 “Production.Product” 表中的 “ProductID”(主键)之间存在关联,如下图所示: