SQL

SQL 知识量:22 - 44 - 129

12.1 联结><

关系表- 12.1.1 -

关系表是关系型数据库中的表的基本形式,例如这里有三个表:学生表(student)、课程表(lesson)和选课表(course),它们的具体内容如下:

student:

+----+--------+-----+--------+
| id | name   | age | sex    |
+----+--------+-----+--------+
|  1 | Susan  |  11 | female |
|  2 | Jame   |  12 | male   |
|  3 | Bob    |  11 | male   |
|  4 | Robot  |  10 | male   |
|  5 | Jen    |  11 | female |
|  6 | Toney  |  10 | male   |
|  7 | Jack   |  13 | male   |
|  8 | Alice  |  10 | female |
|  9 | Bonnie |  11 | male   |
| 10 | Ella   |  12 | female |
+----+--------+-----+--------+

lesson:

+----+---------+
| id | name    |
+----+---------+
|  1 | Maths   |
|  2 | English |
|  3 | Natural |
+----+---------+

course:

+----+------------+-----------+
| id | id_student | id_lesson |
+----+------------+-----------+
|  1 |          1 |         1 |
|  2 |          5 |         3 |
|  3 |          2 |         1 |
|  4 |          4 |         1 |
|  5 |          6 |         1 |
|  6 |          1 |         2 |
|  7 |          3 |         2 |
|  8 |          4 |         2 |
|  9 |          5 |         2 |
| 10 |          2 |         3 |
| 11 |          4 |         3 |
| 12 |          6 |         3 |
+----+------------+-----------+

以上三个表有如下关系:

  • course中的id_student与student中的id是对应的。

  • course中的id_lesson与lesson中的id是对应的。

  • 在course中,id_student和id_lesson称为外键,三个表中的id均称为主键。

因此,通过以上主键和外键之间的关联关系,这三个表成为了关系表。

将以上三个表中的信息分别存储于三个表,而不是一个表是很有必要的,因为尽量避免重复数据是关系数据库设计的原则。在以上三个表中:

  • 学生的信息和课程信息都不重复。

  • 如果要改变学生或课程信息,只需改动一条即可。

  • 每个表中的数据都很容易保持一致性。

  • 以上数据表的设计具有较好的可伸缩性。

可伸缩是指能够适应不断增加的工作量而不会出现问题或失败。

为什么使用联结- 12.1.2 -

由于信息被分别存储于多个关系表中,因此,如果要同时查询多个表中的相关信息,就需要一种同时检索多个表中数据的机制,联结就是这种机制,可以在一次查询中,通过联结多个表返回一组数据,这正是联结的价值所在。