两者之间建立了一种关系数据库表当一个表使用引用另一个表的主键的外键时。这是术语后面的基本概念关系数据库。
外键如何建立关系
一个首要的关键唯一标识表中的每条记录。它是一种候选关键字这通常是表中的第一列,可以由数据库自动生成,以确保它是惟一的。
外键是用于将记录链接到另一个表中的数据的另一个候选密钥(不是主要键)。
例如,考虑这两个表,以确定哪些老师教导哪种课程。
在这里,Courses表的主键是Course_ID。它的外键是Teacher_ID:
pround_id. | Course_Name | Teacher_ID |
---|---|---|
课程_001 | 生物学 | Teacher_001 |
课程_002 | 数学 | Teacher_001 |
课程_003. | 英语 | Teacher_003 |
可以看到Courses中的外键与Teachers中的主键匹配:
Teacher_ID | Teacher_Name |
---|---|
Teacher_001 | 卡门 |
Teacher_002 | veronica |
Teacher_003 | 豪尔赫 |
我们可以说,Teacher_ID外键帮助建立了一个的关系课程和教师桌之间。
数据库关系的类型
使用外键或其他候选键,您可以在表之间实现三种类型的关系:
一对一:这种类型的关系只允许在关系的每一侧进行一个记录。主键只涉及一个在另一个表中只有一个记录或无。例如,在婚姻中,每个配偶只有一个其他配偶。这种关系可以在单个表中实现,因此不使用外键。
一对多:一对多关系允许一个表中的一条记录与另一个表中的多条记录相关联。考虑一个拥有客户和订单表的数据库的业务。
单个客户可以购买多个订单,但单个订单无法与多个客户联系起来。因此,OrderS表将包含与客户表的主键匹配的外键,而客户表将没有指向Orders表的外键。
多对多:这是一种复杂的关系,其中表中的许多记录可以链接到另一个表中的许多记录。例如,我们的业务可能不仅需要客户和订单表,而且可能还需要产品表。
再次,客户和订单表之间的关系是一对多,但考虑订单和产品表之间的关系。订单可以包含多个产品,并且产品可以链接到多个订单:几个客户可能会提交包含一些相同产品的订单。这种关系至少需要三个表。
为什么数据库关系很重要?
在数据库表之间建立一致的关系有助于确保数据完整性,有助于数据库的规范化。例如,如果我们不通过外键链接任何表,而只是合并Courses和Teachers表中的数据,就像这样:
Teacher_ID | Teacher_Name | 课程 |
---|---|---|
Teacher_001 | 卡门 | 生物学,数学 |
Teacher_002 | veronica | 数学 |
Teacher_003 | 豪尔赫 | 英语 |
这种设计是不灵活的,并且违反了数据库规范化的第一原则,即第一标准形式(first Normal Form),即每个表单元格应该包含单个的、离散的数据。
或者我们决定简单地为Carmen添加第二条记录,以执行1NF:
Teacher_ID | Teacher_Name | 课程 |
---|---|---|
Teacher_001 | 卡门 | 生物学 |
Teacher_001 | 卡门 | 数学 |
Teacher_002 | veronica | 数学 |
Teacher_003 | 豪尔赫 | 英语 |
这仍然是一个薄弱的设计,引入了不必要的重复和所谓的数据插入异常,这只是意味着它可能有助于数据不一致。例如,如果教师有多个记录,则如果需要进行一些数据,则何时需要进行数据编辑的人员没有意识到存在多个记录?然后,该表将包含同一个人的不同数据,而无需任何明确的方式来识别或避免它。
将此表分解为Teachers和Courses这两个表,将创建数据之间的适当关系,从而有助于确保数据的一致性和准确性。