数据库关系是所有关系数据库的支柱
当一个表具有引用另一个表的主键的外键时,两个数据库表之间建立关系。 这是术语关系数据库背后的基本概念。
外键如何建立关系
让我们回顾一下主键和外键的基础知识。 主键唯一标识表中的每条记录。 它是一种候选键 ,通常是表中的第一列,可以由数据库自动生成,以确保它是唯一的。
外键是用于将记录链接到另一个表中的数据的另一个候选键(而非主键)。
例如,考虑这两个表格来确定哪个教师教授哪门课程。
在这里,课程表的主键是Course_ID。 它的外键是Teacher_ID:
COURSE_ID | 课程名 | Teacher_ID |
---|---|---|
Course_001 | 生物学 | Teacher_001 |
Course_002 | 数学 | Teacher_001 |
Course_003 | 英语 | Teacher_003 |
您可以看到课程中的外键与教师中的主键相匹配:
Teacher_ID | 老师的名字 |
---|---|
Teacher_001 | 卡门 |
Teacher_002 | 维罗尼卡 |
Teacher_003 | 乔治 |
我们可以说Teacher_ID外键帮助建立了课程和教师表之间的关系 。
数据库关系的类型
使用外键或其他候选键,可以在表之间实现三种类型的关系:
一对一 :这种类型的关系在关系的每一方面只允许一条记录。
主键与另一个表中的一个记录(或无)相关。 例如,在婚姻中,每个配偶只有一个配偶。 这种关系可以在一个表中实现,因此不使用外键。
一对多 :一对多关系允许一个表中的单个记录与另一个表中的多个记录相关联。
考虑具有客户和订单表的数据库的业务。
单个客户可以购买多个订单,但是单个订单不能与多个客户相关联。 因此,Orders表将包含一个与Customers表的主键相匹配的外键,而Customers表则没有外键指向Orders表。
多对多 :这是一个复杂的关系,表中的许多记录可以链接到另一个表中的许多记录。 例如,我们的业务可能不仅需要Customers和Orders表,还可能需要一个Products表。
同样,Customers和Orders表之间的关系是一对多关系,但考虑订单和产品表之间的关系。 订单可以包含多个产品,并且产品可以链接到多个订单:多个客户可能会提交包含某些相同产品的订单。 这种关系至少需要三张表。
什么是数据库关系重要?
在数据库表之间建立一致的关系有助于确保数据完整性,从而有助于数据库规范化 例如,如果我们没有通过外键链接任何表格,而只是将数据结合到“课程”和“教师”表格中,那么结果如下所示:
Teacher_ID | 老师的名字 | 课程 |
---|---|---|
Teacher_001 | 卡门 | 生物学,数学 |
Teacher_002 | 维罗尼卡 | 数学 |
Teacher_003 | 乔治 | 英语 |
这种设计不灵活,违反了数据库规范化的第一个原则 - 第一范式(1NF),该规则规定每个表格单元格应包含单个离散的数据片段。
或者,也许我们决定为卡门添加第二个记录,以强制执行1NF:
Teacher_ID | 老师的名字 | 课程 |
---|---|---|
Teacher_001 | 卡门 | 生物学 |
Teacher_001 | 卡门 | 数学 |
Teacher_002 | 维罗尼卡 | 数学 |
Teacher_003 | 乔治 | 英语 |
这仍然是一个薄弱的设计,引入了不必要的重复和所谓的数据插入异常 ,这只意味着它可能导致不一致的数据。
例如,如果教师有多条记录,那么如果某些数据需要编辑,但执行数据编辑的人员没有意识到存在多条记录? 然后该表格将包含同一个人的不同数据,而没有任何明确的方式来识别它或避免它。
将此表分成两个表格,教师和课程(如上图所示),创建数据之间的适当关系,从而有助于确保数据的一致性和准确性。