关系数据库的结构

文章访问量:

表行列

关系数据库主要由表构成,而表则由行,列两者构成。

表(table)

又名关系:表的集合构成了关系数据库

关系数据库由一张或多张表构成。各位只要有写过多表查询的SQL题就能理解我在说什么了。每张表都有一个唯一不重复的名称。

前面我们提到过,由于表实际上表示的是数据之间的关系,所以表(table)在关系模型中,用术语的话被称为关系(relation)

又名属性:属性定义了该列的取值范围

以leetcode某个题目的表为例

Person 表:
+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+

id可以是emoji吗?正常来说一般都是int类型的数字。email的后缀可以是@@example.com吗?也不行吧。而这里的id和email便是表的列。

很明显,列对于该列要存放的数据,存在一个允许取值的集合。相当于列是该列数据的属性(attribute),取值的集合则被称作域(domain),同时域约束也是完数据库完整性约束中最基本的形式

需要注意的是,域必须是原子的。比如上面的email。id=1的某个人可能有多个邮件地址,那么我们可以把多个邮件地址都放入id=1的email中吗?不行。我们只能新增一列“email_2″或者新增一行用新的id表示同一个人的不同email。

这里的”原子“,重点在于我们将如何使用该列中的元素。比如对于上面的email,假设我们写的web应用要求需要去掉邮箱后缀”@example.com”来得到前缀的“john”,那么email属性就被视为非原子的,因为邮箱还可以被划分为“john”和”@example.com”两列数据。但如果我们仅需要email,并把它当作不可再分的单元,那么email才具有原子性。

又名元组:一组值之间的某种联系

还是上面那张表。

+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+

很明显,一个id对应一个email,实际生活中这个id还可能对应这用户名,用户密码等数据。这意味着表中的一行对应着一组值之间的某种联系。

元组(tuple)一词来源于数学,表示“一组值的序列(或列表)”。而在数学中,n个值之间的关系我们用这些值的一个n元组来表示,所以在关系模型中我们用元组来指代行。

Subscribe
提醒
0 评论
Inline Feedbacks
View all comments
0
在此留下你的评论x