Skip to main content

数据库关系简介

关系型数据库简介 (六月 2025)

关系型数据库简介 (六月 2025)
Anonim

数据库术语“关系”或“关系”描述了表中数据的连接方式。

数据库世界的新手通常很难看到数据库和电子表格之间的差异。他们看到数据表并认识到数据库允许您以新的方式组织和查询数据,但却未能掌握数据的重要性 数据之间的关系 这给了关系数据库技术它的名字。

关系允许您以强大的方式描述不同数据库表之间的连接。然后可以利用这些关系来执行强大的跨表查询,称为连接。

数据库关系的类型

有三种不同类型的数据库关系,每种关系根据关系中可能涉及的表行数来命名。这三种关系类型中的每一种都存在于两个表之间。

  • 一对一的关系 当第一个表中的每个条目在第二个表中只有一个对应时,就会出现这种情况。很少使用一对一关系,因为将所有信息简单地放在一个表中通常更有效。一些数据库设计者通过创建包含来自另一个表的数据子集的表来利用这种关系。
  • 一对多的关系 是最常见的数据库关系类型。它们出现在表A中的每个记录对应于表B中的一个或多个记录时,但表B中的每个记录仅对应于表A中的一个记录。例如,教师表和小学中的学生表之间的关系数据库可能是一对多的关系,因为每个学生只有一个教师,但每个教师有多个学生。这种一对多设计有助于消除重复数据。
  • 多对多的关系 当表A中的每个记录对应于表B中的一个或多个记录时,表B中的每个记录对应于表A中的一个或多个记录。例如,教师和课程表之间的关系可能很多 - 因为每个老师可能会指导不止一门课程,而且每门课程可能会有一位以上的教练。

自我参照关系:一个特例

当只涉及一个表时,会发生自引用关系。一个常见示例是Employees表,其中包含有关每个员工的主管的信息。每位主管也是一名员工,并拥有自己的主管。在这种情况下,存在一对多的自引用关系,因为每个员工都有一个主管,但每个主管可能有多个员工。

用外键创建关系

您可以通过指定外键来创建表之间的关系。此密钥告诉关系数据库表是如何相关的。在许多情况下,表A中的列包含从表B引用的主键。

再次考虑教师和学生表的示例。 Teachers表只包含ID,名称和课程列:

老师
InstructorID老师的名字课程
001约翰·多伊英语
002简·施莫数学

Students表包含ID,名称和外键列:

学生们
学生卡学生姓名Teacher_FK
0200洛厄尔史密斯001
0201Brian Short001
0202Corky Mendez002
0203莫妮卡琼斯001

专栏 Teacher_FK 在Students表中引用Teachers表中教师的主键值。

通常,数据库设计者将在列名中使用“PK”或“FK”来轻松识别主键或外键列。

请注意,这两个表格说明了教师和学生之间的一对多关系。

关系和参考完整性

将外键添加到表后,可以创建一个数据库约束,强制实现两个表之间的引用完整性。这可确保表之间的关系保持一致。当一个表具有另一个表的外键时,参照完整性的概念表明表B中的任何外键值必须引用表A中的现有记录。

实施关系

根据您的数据库,您可以以不同的方式实现表之间的关系。 Microsoft Access提供了一个向导,可以轻松地链接表并强制实施参照完整性。

如果直接编写SQL,则首先要创建教师表,将ID列声明为主键:

CREATE TABLE教师(

InstructorID INT AUTO_INCREMENT PRIMARY KEY, Teacher_Name VARCHAR(100), 课程VARCHAR(100));

创建Students表时,将Teacher_FK列声明为引用教师表中的InstructorID列的外键:

CREATE TABLE学生( StudentID INT AUTO_INCREMENT PRIMARY KEY, Student_Name VARCHAR(100),Teacher_FK INT, FOREIGN KEY(Teacher_FK)REFERENCES教师(讲师ID)));

使用关系连接表

在数据库中创建一个或多个关系后,可以通过使用SQL JOIN查询来组合来自多个表的信息来充分利用它们的功能。最常见的连接类型是SQL INNER JOIN或简单连接。此类型的连接从多个表返回满足连接条件的所有记录。例如,此JO​​IN条件将返回Student_Name,Teacher_Name和Course,其中Students表中的外键与Teachers表中的主键匹配:

选择Students.Student_Name,Teachers.Teacher_Name,Teachers.Course来自学生内部联合教师ON Students.Teacher_FK = Teachers.InstructorID;

这个语句产生一个像这样的表:

从SQL Join语句返回表

Student_NameTeacher_NameCourseLowell SmithJohn DoeEnglishBrian ShortJohn DoeEnglishCorky MendezJane SchmoeMathMonica JonesJohn DoeEnglish